【问题标题】:Making a global function in Unity C#在 Unity C# 中创建一个全局函数
【发布时间】:2018-07-17 21:21:11
【问题描述】:

有人可以指点我一个可以统一制作全局“后退按钮”功能的教程吗?

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

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

但是,缺点是我需要在每个场景中将这个函数附加到一个活动的“游戏对象”中。

是否有任何方法可以使这个函数全局化,因此这个“更新”函数总是在每个场景中监听?

【问题讨论】:

  • “我需要在每个场景的每个“游戏对象”中附加这个函数。”不,你为什么会这样想?包含该代码的脚本应该只附加到一个活动的游戏对象,它应该可以工作
  • 是的,我的意思是一个活跃的“游戏对象”。感谢您指出这一点...我已经编辑了问题
  • 那么Bijan的回答很可能就是你所需要的
  • @Hikari 我还在答案中添加了更多关于 LoadScene 的注释。
  • 我是用 Bijan 的回答做的......谢谢你的帮助程序员......(⌒_⌒;)

标签: c# unity3d


【解决方案1】:

您可以将此脚本附加到您的初始场景中的游戏对象。

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(){
    ...
}

【讨论】:

  • 不错的答案!!谢谢你verrry muchh的帮助Bijan! (´。• ω•。`) ♡
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
  • 1970-01-01
  • 2012-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多