Menu
CoddyTech

加载场景

本课属于 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 重新开始运行。

challenge icon

挑战

简单

让每个传送门都加载其 sceneName 指定的场景。

  1. 在 Portal.cs 顶部添加 using UnityEngine.SceneManagement;。
  2. 编写 void OnTriggerEnter(Collider other):当 other.CompareTag("Player") 时,调用 SceneManager.LoadScene(sceneName);。

按“开始”,然后走进每个传送门:Desert、Hub 和 Glacier 会依次加载。然后点击“检查”。

亲手试试

using UnityEngine;

public class Portal : MonoBehaviour
{
    public string sceneName;

    // 当玩家走进去时,加载名为 sceneName 的场景
}

打造真正的游戏中的所有课

自己练习: Unity 在线编辑器