我一直在尝试使用SetActive ()打开和关闭GameObjects。我无法弄清楚,最终使用了: GameObject.Find ("ObjectName").GetComponent<Image> ().enabled = false;关闭图像。我不尝试使用相同的脚本来关闭其中嵌套有多个动画的GameObject。GameObject.Find ("ObjectName").GetComponent<???> ().enabled = false;GameObject.Find ("ObjectName").SetActive (false);我不确定<>中有什么内容,但是我已经阅读到可以使用SetActive ()来做到这一点,但这似乎不起作用,并给了我"Object Reference not set to object"错误。那么这两者之间有什么区别,我将如何正确使用它们? 最佳答案 使用GetComponent可以启用/禁用游戏对象上的特定组件并与之交互。例如,您可能需要在某个时候禁用GameObject的刚体,但是您仍然希望该对象及其上的所有其他功能都处于 Activity 状态。因此,您可以简单地说:GameObject.Find("MyObject").GetComponent<Rigidbody>().enabled = false;请注意,“”内的是您要与之交互的组件的类名。例如,如果您有一个脚本,您已经在一个名为MyScript的游戏对象上编写了自己,则可以像这样抓住它:MyScript script = GamesObject.Find("MyObject").GetComponent<MyScript>().enabled = true;另外,GetComponent的另一个很好的用途是从对象上的脚本读取信息。例如,如果您有一个名为Health的脚本,其对象上带有一个公共变量HitPoints,则另一个脚本可以使用GetComponent来访问该信息。if( enemyGameObject.GetComponent<Health>().HitPoints < 0 ){ enemyGameObject.SetActive(false);}使用SetActive将完全启用和禁用GameObject。这比删除/创建新对象便宜,因此经常用于Object Pooling之类的技术中。例如,如果您有一个需要禁用的GameObject,但是您知道很快就要使用它,那么调用它的成本要便宜得多MyGameObject.SetActive(false);...MyGameObject.SetActive(true);比起完全删除该对象,然后在准备好该对象时再创建一个新对象而言。关于unity3d - GetComponent <Image>().enabled和.SetActive(false)之间有什么区别?团结一致,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34908890/ 10-12 12:36