【发布时间】:2016-05-12 00:58:51
【问题描述】:
我正在编写一个方法来检查一个游戏对象是否有一个组件。
这里是:
public static bool HasComponent <T>(this GameObject obj)
{
return obj.GetComponent<T>() != null;
}
我是这样使用它的:
void Update()
{
if (Input.GetKey("w"))
{
if (gameObject.HasComponent<Rigidbody>())
{
print("Has a rigid body.");
return;
}
print("Does not have rigid body.");
}
}
游戏对象没有刚体,但它仍然在打印它的刚体。
【问题讨论】:
-
尝试 debug.logging 对象名称,以确保您没有不小心将此脚本放在另一个对象上,也许?
-
我做了,仍然打印出它有一个刚体,即使它没有。
-
嗨@HamzaHasan ...答案是OP在泛型中犯了语法错误。您必须在末尾有一个 where 子句,否则调用 GetComponent
() 的返回值将是无意义的......它正在返回我相信 它是否有 任何组件都附加。这只是一个语法错误,Hamza。 -
@JoeBlow 好的,所以它返回一个非空值。也是因为这个吗?
-
嗨哈姆扎,如果我不清楚,对不起。我相信因为“T”基本上是“空白”......你在问它“GetComponent ()”。请注意,尖括号中有 NOTHING。这意味着您要问它它是否有任何组件——任何类型的任何组件。我可以解释一下吗?当然,它必须附加组件(某种类型!)所以它返回“true”。有意义吗?