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