我想查找并激活非活动对象:主菜单。我尝试了这段代码,但它不起作用。我做错了什么?
if (Input.GetKey(KeyCode.Escape))
{
this.gameObject.SetActive(false);
GameObject.Find("Main Menu").SetActive(true);
}
在设置对象之前对对象的引用,或者创建自己的方法,因为您可以将它们都放在同一个父对象下,因此可以使用 GetComponentsInChildren
public static GameObject FindObject(this GameObject parent, string name)
{
Transform[] trs= parent.GetComponentsInChildren<Transform>(true);
foreach(Transform t in trs){
if(t.name == name){
return t.gameObject;
}
}
return null;
}
这是一个应存储在静态类中的扩展方法。你像这样使用它:
GameObject obj = parentObject.FindObject("Main Menu");
您
首先将父游戏对象设置为非活动状态。试试这个:
if (Input.GetKey(KeyCode.Escape))
{
GameObject.Find("Main Menu").SetActive(true);
this.gameObject.SetActive(false);
}
最简单的方法是在类的顶部创建一个公共引用,如下所示:
public GameObject MainMenu;
然后,在编辑器中,将 MainMenu 对象拖到新创建的引用上。之后,在你的逻辑中,你可以简单地这样做:
public GameObject MainMenu;
if (Input.GetKey(KeyCode.Escape))
{
MainMenu.SetActive(true);
this.gameObject.SetActive(false);
}
这样做有助于防止空引用,因为它是类型安全的。