📜  unity如何引用其他场景中的脚本 - C#(1)

📅  最后修改于: 2023-12-03 15:20:53.926000             🧑  作者: Mango

Unity如何引用其他场景中的脚本 - C#

在Unity中,我们可以创建多个场景并在它们之间进行切换。有时候我们在一个场景(如主菜单)中定义了一些通用的脚本,我们需要在另一个场景中引用这些脚本。本文将介绍Unity如何引用其他场景中的脚本。

场景管理器

在Unity中,场景是由场景管理器(SceneManager)负责管理的。我们可以通过脚本来调用场景管理器中的函数来实现场景的加载与卸载、场景之间的切换等操作。具体如下所示:

using UnityEngine.SceneManagement;

//...

// 加载场景
SceneManager.LoadScene("SceneName");

// 卸载场景
SceneManager.UnloadSceneAsync("SceneName");

// 切换场景
SceneManager.LoadScene("SceneName", LoadSceneMode.Single);
引用其他场景中的脚本

在Unity中,场景之间是相互独立的,如果我们想要在一个场景中使用另一个场景中的脚本,需要进行如下操作:

  1. 在要使用脚本的场景中创建一个空物体,命名为“ScriptManager”(也可以用其他名称)。
  2. 将要使用的脚本文件添加到ScriptManager物体中,并设置好需要公开的成员变量与方法。
  3. 在需要调用脚本的场景中(如Main场景)的脚本中,先加载包含ScriptManager的场景(如Sub场景),然后通过GameManager.instance来获取脚本实例并进行调用。

例如,我们在Sub场景中有一个脚本A:

using UnityEngine;

public class A : MonoBehaviour
{
    public int value = 10;

    public void TestFunction()
    {
        Debug.Log("Hello Unity!");
    }
}

在Main场景中,我们想要调用脚本A中的TestFunction()函数,并获取value的值,可以进行如下操作:

using UnityEngine;
using UnityEngine.SceneManagement;

public class B : MonoBehaviour
{
    private A aScript;

    void Start()
    {
        // 加载Sub场景
        SceneManager.LoadScene("Sub");

        // 获取ScriptManager中的脚本实例
        GameObject scriptManager = GameObject.Find("ScriptManager");
        aScript = scriptManager.GetComponentInChildren<A>();
    }

    void Update()
    {
        // 调用脚本A中的TestFunction()函数
        aScript.TestFunction();

        // 获取脚本A中的value值
        int value = aScript.value;
    }
}

需要注意的是,由于ScriptManager是在Sub场景中创建的,因此在加载Sub场景之前是无法获取到ScriptManager中的脚本实例的。以上代码片段可能会报错“找不到对象名为ScriptManager的游戏对象”,这时只需将Start()函数中的以下两行代码移到Start()函数末尾即可:

// 获取ScriptManager中的脚本实例
GameObject scriptManager = GameObject.Find("ScriptManager");
aScript = scriptManager.GetComponentInChildren<A>();

归纳起来,使用其他场景中的脚本,需要先创建一个空物体,将脚本文件添加到空物体中,并通过GameManager.instance来获取脚本实例进行调用。

以上就是Unity引用其他场景中的脚本的详细介绍,希望对大家有所帮助。