2017-03-17 97 views
0

要禁用游戏物体,实现这一目标我已经写了这样的代码:我如何启用禁用的游戏对象,团结

GameObject go; 
go = GameObject.FindWithTag("MainCamera"); 
Destroy(go); 

然后我努力使残疾游戏物体。

任何人都可以在这方面帮助我吗?

回答

2

当调用Destroy,你....破坏游戏对象,您不要禁用它。相反,使用SetActive

此外,避免使用FindXXX等功能,特别是多次使用。添加引用的检查,而不是

// Drag & Drop the gameobject in the inspector 
public GameObject targetGameObject ; 

public void DisableGameObject() 
{ 
     targetGameObject.SetActive(false) ; 
} 

public void EnableGameObject() 
{ 
     targetGameObject.SetActive(true) ; 
} 

public void ToggleGameObject() 
{ 
     if(targetGameObject.activeSelf) 
      DisableGameObject() ; 
     else 
      EnableGameObject(); 
} 

否则,找对象一次,无论是在启动功能或当您尝试禁用游戏对象。 Keeop记住FindXXX功能无法找到禁用游戏物体(大部分时间)

// Drag & Drop the gameobject in the inspector 
private GameObject targetGameObject ; 

public void DisableGameObject() 
{ 
     if(targetGameObject == null) 
      targetGameObject = GameObject.FindWithTag("MainCamera"); 
     if(targetGameObject != null) 
      targetGameObject.SetActive(false) ; 
} 

public void EnableGameObject() 
{ 
     if(targetGameObject != null) 
      targetGameObject.SetActive(true) ; 
} 

public void ToggleGameObject() 
{ 
     if(targetGameObject == null) 
      targetGameObject = GameObject.FindWithTag("MainCamera"); 

     if(targetGameObject == null) 
      return ; 

     if(targetGameObject.activeSelf) 
      DisableGameObject() ; 
     else 
      EnableGameObject(); 
} 
+0

如果标记MainCamera,就没有必要进行搜索,使用Camera.main – Everts

+1

使用'游戏对象的海​​报。 FindWithTag',因此,我也使用它。这是一般的方法。也许,他会改变主意,他会想找到一个带有不同标签的gameobject。 – Hellium