加载场景
本课属于 Coddy Unity 学习旅程的“打造真正的游戏”单元。第 17 课,共 60 课。
Unity 游戏分为多个场景:菜单、各个关卡和制作人员名单。每个场景都是独立的文件,拥有自己的对象,脚本则通过 SceneManager.LoadScene 切换到另一个场景,该方法来自 UnityEngine.SceneManagement 命名空间。菜单中的“开始”按钮已在 Inspector 中连接,点击后会打开 Forest 关卡:
using UnityEngine;
using UnityEngine.SceneManagement;
public class MainMenu : MonoBehaviour
{
public void Play()
{
SceneManager.LoadScene("Forest");
}
}Unity 只能加载已添加到构建场景列表中的场景:在 Unity 6 中,打开 File > Build Profiles,然后查看 Scene List(旧版本中这个窗口叫 Build Settings)。场景名称必须与场景文件名完全一致。如果场景未添加到列表中,或者名称拼写错误,例如 "Forrest",场景就不会加载,Console 会显示一条以 Scene 'Forrest' couldn't be loaded 开头的错误,并说明该场景尚未添加到构建中,游戏也会停留在菜单中。
场景切换不会立即完成。当前帧的剩余部分会先运行,所以 LoadScene 之后的代码行仍会执行;到下一帧开始时,Unity 会销毁旧场景中的所有对象并创建新场景,新场景中的脚本会从 Awake 和 Start 重新开始运行。
挑战
简单让每个传送门都加载其 sceneName 指定的场景。
- 在
Portal.cs顶部添加using UnityEngine.SceneManagement;。 - 编写
void OnTriggerEnter(Collider other):当other.CompareTag("Player")时,调用SceneManager.LoadScene(sceneName);。
按“开始”,然后走进每个传送门:Desert、Hub 和 Glacier 会依次加载。然后点击“检查”。
亲手试试
using UnityEngine;
public class Portal : MonoBehaviour
{
public string sceneName;
// 当玩家走进去时,加载名为 sceneName 的场景
}
打造真正的游戏中的所有课
自己练习: Unity 在线编辑器