gameObject.find仅返回null,即使GameObject在继承结构中处于活动状态



我试图从一个场景转到另一个场景,并在发生这种情况后触发功能。因此,当我在主菜单页面上按游戏游戏按钮时,它会加载一个函数以开始建立世界。我已经获得了建立一个世界的功能,但是一旦我将其纳入了它停止工作的按钮。到目前为止,我相信这归结于我并没有完全理解从另一个类调用函数以使其正常运行的方法。我开始将我的游戏对象定义为:

private static GameOjbect Play;

这不允许我在Unity编辑器中为其分配游戏对象。因此,我下了使用:

的方法
GameObject Play = GameObject.Find("PlayScreen");

当此功能启动时,我的游戏对象在继承结构中处于活动状态,但是程序仍然无法正常运行。测试程序在哪里遇到我使用的问题:

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();
    }
}

以下是我的世界建设功能:

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#的新手,因此对任何类型的帮助都表示赞赏。谢谢。

不要使清醒功能静态。如果您统一会不会称呼它。另外,当您进行GameObject Play = GameObject.Find("PlayScreen");时,您将创建 local 变量。如果要将其保存在静态变量中,则不应该这样做。请参阅下面:

public class WorldBuilder : MonoBehaviour {
    public static GameObject Play;
    public static void Awake()
    {
        Debug.Log("Finding Scene...");
        WorldBuilder.Play = GameObject.Find("PlayScreen");
        Debug.Log(Play);
    } 
}

另外,在游戏游戏中删除呼叫:

public void PlayGame()
{
    SceneManager.LoadScene("InGame");
    Debug.Log("Loading startup...");
}

最新更新