我想找到并激活非活动对象:主菜单。 我尝试这个代码,但它无法正常工作。我做错了什么?
if (Input.GetKey(KeyCode.Escape))
{
this.gameObject.SetActive(false);
GameObject.Find("Main Menu").SetActive(true);
}
答案 0 :(得分:0)
您首先将父游戏对象设置为无效。试试这个:
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);
}
这样做有助于防止空引用,因为它是类型安全的。
答案 1 :(得分:0)
在设置对象之前引用该对象或创建自己的方法,因为您将它们全部放在同一个父对象下,您可以使用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");