【问题标题】:Gameobject.find only returning null even when gameobject is active in heirarchy即使游戏对象在层次结构中处于活动状态,Gameobject.find 也仅返回 null
【发布时间】: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# 的新手,所以任何形式的帮助都值得赞赏。谢谢。

【问题讨论】:

  • 我不明白你为什么需要从另一个函数调用AwakeAwake 无论如何都会在你加载新场景时被调用,如果GameObject Play = GameObject.Find("PlayScreen") 找到对象,你也可以签入Update。然后我们就可以知道是不是同步问题了。
  • @AliKanat 好的,所以我把它放在更新中,它工作了。但是,有没有办法让它工作而不在更新功能中不断重复呢?
  • 您通常应该在AwakeStart 中执行此操作,但您不必像使用WorldBuilder.Awake() 那样从前一个场景中调用它,只需尝试在加载的场景中使用非静态Awake() 你会看到它会工作。

标签: c# unity3d gameobject


【解决方案1】:

不要将 Awake 函数设为静态。如果你这样做,Unity 不会调用它。 此外,当您执行GameObject Play = GameObject.Find("PlayScreen"); 时,您正在创建一个本地 变量。如果你想把它保存在一个静态变量中,你不应该这样做。见下文:

public class WorldBuilder : MonoBehaviour {
    public static GameObject Play;

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

另外,删除 PlayGame 中的调用:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多