之间的区别。 sendmessage和设置值

时间:2013-10-19 15:47:48

标签: unity3d game-engine

这两种方法有什么区别?我为什么喜欢一个?

1)

GameObject.FindGameObjectWithTag("").GetComponent<Rocket>().active = true;

2)

GameObject.FindGameObjectWithTag("").GetComponent<Rocket>().SendMessage("setActive");

谢谢!

2 个答案:

答案 0 :(得分:1)

发送消息搜索gameObject的所有组件,并调用与消息同名的任何函数。不是100%肯定,但我确定这使用通常被认为是慢的反射。

SetActive()或活动变量将gameObject设置为活动与否。如果它不活动则不会在场景中渲染,反之亦然。

答案 1 :(得分:0)

首先,您的代码似乎存在一些不一致之处:

1)Components(和MonoBehavior)没有活动属性(active属于GameObject),因此第一行代码不应该编译。此外,最简单的统一版本不再有效,它被activeSelfactiveInHierarchy取代。

顺便说一下,activeSelf和activeInHierarchy都是只读的,所以你不能直接给它们赋值。要使用SetActive方法更改其值。

2) 第二行代码也不应该工作(除非Unity在幕后做了一些魔术),因为SetActive方法属于GameObject而不属于Rocket Component。< / p>

现在,我想你的问题是:

之间的区别
gameObject.SetActive(true);

gameObject.SendMessage("SetActive",true);

结果是一样的,但第二种方式Unity3D将使用reflection来查找要调用的正确方法(如果有的话)。反射对性能有很大的影响,所以我建议你尽可能地避免它。