【发布时间】:2018-12-19 10:58:03
【问题描述】:
我正在尝试从一个场景转移到另一个场景并在发生这种情况时触发一个功能。 因此,当我按下主菜单页面上的玩游戏按钮时,它会加载一个开始构建世界的功能。我有构建世界的功能,但是一旦我将它附加到一个按钮上它就停止工作了。 到目前为止,我认为这取决于我没有完全理解从另一个类调用函数以使其正常运行的方法。 我开始将我的 GameObject 定义为:
private static GameOjbect Play;
这不允许我在统一编辑器中为其分配游戏对象。于是,我就记下了使用方法:
GameObject Play = GameObject.Find("PlayScreen");
当此功能开始时,我的 GameObeject 在层次结构中处于活动状态,但程序仍然无法正常运行。为了测试程序在哪里遇到了我使用的问题:
Debug.Log(Play);
我认为这只会将“PlayScreen”输出到调试日志,因为这是我正在搜索的游戏对象,但这只会返回“Null”并且我的程序不会继续进行,这会创建一堵墙。
下面是我的主菜单代码:
public class MainMenu : MonoBehaviour
{
public GameObject PlayScene;
public GameObject SettingsScreen;
public void PlayGame()
{
SceneManager.LoadScene("InGame");
Debug.Log("Loading startup...");
WorldBuilder.Awake();
}
}
下面是我的 WorldBuilding 函数:
public class WorldBuilder:MonoBehaviour
{
public static GameObject Play;
public static void Awake()
{
Debug.Log("Finding Scene...");
GameObject Play = GameObject.Find("PlayScreen");
Debug.Log(Play);
}
}
为什么我的程序没有找到游戏对象? 我还是 C# 的新手,所以任何形式的帮助都值得赞赏。谢谢。
【问题讨论】:
-
我不明白你为什么需要从另一个函数调用
Awake。Awake无论如何都会在你加载新场景时被调用,如果GameObject Play = GameObject.Find("PlayScreen")找到对象,你也可以签入Update。然后我们就可以知道是不是同步问题了。 -
@AliKanat 好的,所以我把它放在更新中,它工作了。但是,有没有办法让它工作而不在更新功能中不断重复呢?
-
您通常应该在
Awake或Start中执行此操作,但您不必像使用WorldBuilder.Awake()那样从前一个场景中调用它,只需尝试在加载的场景中使用非静态Awake()你会看到它会工作。
标签: c# unity3d gameobject