在Unity C#中创建全局函数

时间:2018-07-17 09:59:39

标签: c# unity3d

有人可以指出一个可以统一使用全局“后退按钮”功能的教程吗?

目前,我可以使用此代码通过“更新”功能来覆盖它

if (Input.GetKeyDown(KeyCode.Escape))
{
   //Do something you need
   Debug.Log("Back button is pressed");
}

但是,缺点是,我需要在每个场景的一个活动“游戏对象”中附加此功能。

也许有什么方法可以使该功能全局化,因此这个“更新”功能总是在每个场景中监听吗?

1 个答案:

答案 0 :(得分:4)

您可以将此脚本附加到初始场景中的gameObject。

void Awake(){
    DontDestroyOnLoad(this.gameObject);
}

void Update(){
    if (Input.GetKeyDown(KeyCode.Escape))
    {
       //Do something you need
       Debug.Log("Back button is pressed");
    }
}

DontDestroyOnLoad使游戏对象离开场景后仍然存在。

要更改场景,可以使用以下选项之一调用SceneManager.LoadScene

  • Single关闭所有当前加载的场景并加载一个场景。
  • Additive将场景添加到当前加载的场景中。

SceneManager.LoadScene("OtherSceneName", LoadSceneMode.Single);

一种设计模式是拥有一个初始场景(例如,名为persistantScene或bootstrapper),其中存在诸如上述第一个脚本之类的持久对象。它使用Single选项导航到下一个场景,在下一个场景中保留持久(DontDestroyOnLoad)对象,同时丢弃仅属于前一个场景的其他对象。


此外,如果需要轻松访问,可以将其设置为单例:

public static MyMonobehaviour Instance;

void Awake(){
    Instance = this;
    DontDestroyOnLoad(this.gameObject);
}

void Update(){
    ...
}