Unity 场景的加载和调用方法

这篇博客记录了Unity游戏中场景加载的最新方法。在旧教程中常用的Application加载场景方式已被弃用,现在采用异步加载Scene的方式。同时,OnLevelWasLoaded方法已过时,取而代之的是OnSceneLoaded和OnSceneUnloaded。作者分享了简单的场景管理技巧,并表示这仅作为个人笔记,后续将继续学习更多相关API。

今天学习在做一个小游戏时,游戏教程已经是很久前的,发现加载场景Application代码已经被弃用了,网上查了一下资料,总结一下新的,做一下记录。

using UnityEngine SceneManageMent;//首先引入场景的命名空间

加载场景

SceneManager.LoadScene(int sceneBuildIndex);//传入场景的索引 从0开始
SceneManager.LoadScene(string sceneName);   
### 场景加载时可执行的方法或事件 在 Unity 中,当场景加载时,开发者可以通过特定方法或事件来响应这些操作。以下是几种常见的机制: #### 1. **SceneManager.sceneLoaded sceneUnloaded** Unity 的 `SceneManagement.SceneManager` 类提供了两个静态事件:`sceneLoaded` `sceneUnloaded`。这两个事件允许你在场景加载完成后或者卸载前执行自定义逻辑。 ```csharp using UnityEngine; using UnityEngine.SceneManagement; public class SceneLoader : MonoBehaviour { void Start() { SceneManager.sceneLoaded += OnSceneLoaded; SceneManager.sceneUnloaded += OnSceneUnloaded; } private void OnSceneLoaded(Scene scene, LoadSceneMode mode) { Debug.Log($"Scene Loaded: {scene.name}"); } private void OnSceneUnloaded(Scene scene) { Debug.Log($"Scene Unloaded: {scene.name}"); } } ``` 此代码通过订阅 `sceneLoaded` `sceneUnloaded` 事件,在场景加载或卸载时触发回调函数[^1]。 --- #### 2. **Awake() Start() 方法** 对于任何附加到游戏对象上的脚本,其生命周期中的 `Awake()` `Start()` 方法会在场景加载后自动调用。这意味着你可以在这两个方法中初始化组件或设置状态。 ```csharp using UnityEngine; public class ExampleScript : MonoBehaviour { void Awake() { Debug.Log("Awake called after the scene is loaded."); } void Start() { Debug.Log("Start called once per object during initialization."); } } ``` 注意,如果场景是以 Additive 模式加载的,则可能会有多个活动场景存在,因此需要特别处理[^2]。 --- #### 3. **协程与异步加载** 由于场景加载是一个耗时过程,通常建议使用协程配合 `LoadSceneAsync` 来管理进度条或其他 UI 更新。以下示例展示了如何利用协程监听加载进度并执行额外的任务。 ```csharp using UnityEngine; using UnityEngine.SceneManagement; public class AsyncSceneLoader : MonoBehaviour { IEnumerator LoadYourAsyncScene(string sceneName) { var operation = SceneManager.LoadSceneAsync(sceneName); while (!operation.isDone) { Debug.Log($"Loading progress: {operation.progress * 100}%"); yield return null; } Debug.Log("Scene fully loaded!"); } void Start() { StartCoroutine(LoadYourAsyncScene("ExampleScene")); } } ``` 这种方法不仅能够监控加载进程,还可以确保主线程不会被阻塞[^2]。 --- #### 4. **Timeline API 集成** 如果你正在开发复杂的叙事驱动项目,可能需要用到 Timeline 轨道功能。此时可以创建自定义轨道剪辑类(如 `LightClip`),并通过播放时间轴的方式控制灯光效果或者其他动态变化[^4]。 虽然这并非直接针对场景切换设计的功能,但它确实提供了一种灵活的方式来安排跨场景的行为序列化。 --- ### 总结 综上所述,Unity 提供了多种方式让你能够在场景加载期间以及之后运行必要的代码逻辑。无论是基于事件系统的简单注册还是更高级别的协同程序支持,都足以满足大多数实际需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值