unity3d - GetComponent<Image> ().enabled 和 .SetActive (false) 有什么区别?统一

标签 unity3d gameobject

我一直在尝试使用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/

相关文章:

c# - 统一: Saving/Loading Sprites as Json

unity3d - Raycast 未检测到对象上的正确位置

unity3d - 没有足够的空间来安装 Unity

c# - 类型 'BallMovement'的对象已被销毁,但您仍在尝试访问它

c# - Destroy() 在 Unity3D 中不再工作

c# - 无法以编程方式打开 PDF

c# - 删除 BoxCollider 时的 Unity3D MissingReferenceException

c# - 如何通过代码更改 Unity 中着色器的 alpha

c# - 实例化 GameObject 的正确方法?

c# - 场景统一变化时,两个游戏对象之间保持链接