解决DontDestroyOnload在场景调整中的问题

private static  DontDestroy  _instance;

public static DontDestroy   Instance{

       get

       {

                 return _instance??new GameObject("DontDestroyObj").AddComponent<DontDestroy>();

       }

}


void Awake(){

           if(_instance!=null){

                 Destroy(gameobject);

                 return;

            }

           _instance=this;

          DontDestroyOnLoad(gameobject);

}




### Unity 中同一场景内实现不同场景之间的切换 在 Unity 中,可以通过多种方式实现场景内的 UI 面板或子场景的切换效果。以下是基于提供的引用内容以及专业知识的具体说明。 #### 使用 `SceneManager.LoadScene` 实现场景切换 Unity 提供了一个名为 `Scene Management` 的模块来管理场景加载和卸载的操作。如果目标是在同一个项目文件夹中的多个预制场景之间进行切换,则可以利用 `SceneManager.LoadScene()` 函数完成此功能[^1]: ```csharp using UnityEngine; using UnityEngine.SceneManagement; public class SceneSwitcher : MonoBehaviour { public void LoadNextScene() { SceneManager.LoadScene(1); // 加载索引为1的场景 (第二个场景) } } ``` 上述代码片段展示了如何通过脚本调用函数跳转至下一个预设好的场景。需要注意的是,在实际开发过程中应当先确保所有待使用的场景均已保存并添加到了构建设置列表当中。 #### 场景间数据传递与无缝衔接处理 对于某些特定需求而言,可能不仅希望简单地更换显示画面,还期望保留前一阶段的数据状态或者角色位置等信息。此时可采用如下策略之一解决该类问题[^2]: - **使用 DontDestroyOnLoad() 方法保持对象跨场存活** 将需要持续存在的游戏物件标记为此种模式即可防止其被销毁重置。 ```csharp using UnityEngine; public class PersistentObject : MonoBehaviour { private void Awake() { DontDestroyOnLoad(this.gameObject); } } ``` - **自定义逻辑控制实体迁移** 如果仅需调整玩家或其他重要单位的位置而非整个环境重建的话,那么编写专门负责定位转移的小型程序会更加高效实用一些[^3]: ```csharp using UnityEngine; public class TeleportToPosition : MonoBehaviour { public Transform destinationPoint; public void MovePlayerHere(GameObject player) { player.transform.position = this.destinationPoint.position; } } ``` #### 单页面内部多区域动态交互设计 除了传统的全屏替换外,有时开发者更倾向于制作更为细腻灵活的内容呈现形式——即在同一窗口范围内根据不同条件展现不同的局部视图区块。这种情况下推荐参考下面这种方法论来进行布局规划[^4]: - 创建基础框架容器(Base Panel) - 添加若干隐藏层叠式的次级板块(Child Panels) - 设置触发机制改变可见性属性 示例演示: ```csharp using UnityEngine; using UnityEngine.UI; public class UIPanelManager : MonoBehaviour { [SerializeField] GameObject panelA, panelB; public void ShowPanel(string nameOfPanelToShow){ if(nameOfPanelToShow == "panelA"){ panelA.SetActive(true); panelB.SetActive(false); }else if(nameOfPanelToShow == "panelB"){ panelA.SetActive(false); panelB.SetActive(true); } } } ``` 以上就是关于 unity 同一场景 切换 不同场景 方法的一些常见技巧总结啦! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值