DontDestroyOnLoad方法可以将这个场景的物体带到下个场景使用

本文展示了如何在Unity3D中使用DontDestroyOnLoad方法保持UI元素在场景切换时仍然有效。通过给游戏对象和UI事件系统应用此方法,确保它们在B和C场景中继续可用。同时,代码实现了按钮点击事件触发场景切换并伴随图片颜色的渐变效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class Talk : MonoBehaviour {
	public GameObject events;
	public Image image;

	private float speed = 1f;

	private Button goB,goC;
	// Use this for initialization
	void Start () {
		DontDestroyOnLoad(gameObject);//将代码挂某个物体上 可以把他完整的带到下个场景使用
        DontDestroyOnLoad(events);//ui  事件系统

		//动态获取2个按钮
		goB = transform.GetChild(1).GetChild(0).GetComponent<Button>();
        goC = transform.GetChild(1).GetChild(1).GetComponent<Button>();
		
		//按钮事件
		goB.onClick.AddListener(GoB);
        goC.onClick.AddListener(GoC);

    }
	void GoB()
	{
		image.color = Color.black;
		SceneManager.LoadScene("B");
	}
    void GoC()
    {
        image.color = Color.black;
        SceneManager.LoadScene("C");
    }
    // Update is called once per frame
    void Update () {
		image.color = Color.Lerp(image.color, Color.clear, Time.deltaTime * speed);
	}
}

在开发过程中,经常碰到这个场景中的物体或者UI界面,下个场景也可以用到,这个时候就需要用到DontDestroyOnLoad方法,他可以为你优化代码。

这里我是将UI界面带到了下一个场景中使用

代码中的B.C代表了第二和第三个场景

这里的图片主要做了一个场景切换是颜色渐变的效果

### 使用触发器实现场景切换 在 Unity 中通过触发器实现场景切换是一种常见的方式,这不仅限于玩家角色进入特定区域时触发场景变化,还可以用于其他交互逻辑。 #### 创建触发器对象 创建一个新的 GameObject 来充当触发器。可以通过 `GameObject -> Create Other -> Sphere` 添加一个球形物体作为触发范围表示[^3]。当然也可以根据实际需求调整形状大小,并确保该对象上挂载了一个 Collider 组件且将其属性设为 Trigger 类型以便响应碰撞事件而不阻止物理运动。 #### 编写场景管理脚本 编写名为 `TransitionManager.cs` 的单例模式类负责处理所有的场景过渡操作: ```csharp using UnityEngine; using UnityEngine.SceneManagement; public class TransitionManager : MonoBehaviour { private static TransitionManager _instance; public static TransitionManager Instance{ get{return _instance;} } void Awake(){ if (_instance != null && _instance != this){ Destroy(this.gameObject); }else{ _instance = this; DontDestroyOnLoad(this.gameObject); } } public void Transition(string fromSceneName, string toSceneName){ SceneManager.LoadScene(toSceneName); } } ``` 此代码片段展示了如何构建一个全局唯一的实例化对象 `_instance` 并提供静态访问接口 `Instance` ,以及定义了核心的方法 `Transition()` 完成加载指定名称的新场景的任务[^2]。 #### 实现具体位置的传送功能 对于希望成为传送点的位置,在其关联的游戏对象下附加如下所示的 `Teleport.cs` 脚本: ```csharp using System.Collections; using System.Collections.Generic; using UnityEngine; public class Teleport : MonoBehaviour { public string currentScene; public string targetScene; private void OnTriggerEnter(Collider other) { Debug.Log("Player entered the teleport area."); // 判断是否为玩家触碰到了触发器 if (other.CompareTag("Player")){ TransitionManager.Instance.Transition(currentScene,targetScene); } } } ``` 这段 C# 代码实现了当带有 Player 标签的对象进入触发区时会调用 `TransitionManager` 下面的 `Transition()` 方法完成场景间的转换过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值