我正在与3个人组成的团队为上一个本科生设计一款游戏。
有人制作了3个脚本:
MinerController
扩展MonoBehavior
PlayerController
扩展MinerController
PlayerPhysic
扩展MonoBehavior
如果我将PlayerController.cs
和PlayerPhysic.cs
附加到我的gameObject并在PlayerPhysic.cs
内执行此操作:
public void Awake()
{
minerController = GetComponent<MinerController>();
}
我会得到null
或PlayerController
以及为什么会这样吗?
答案 0 :(得分:3)
之所以有效,是因为PlayerController
的类型为MinerController
,或者更好的说它是从中派生的。
这是相同的方式,例如GetComponent<Collider>
适用于源自Collider
的任何类型,或者GetComponent<Renderer>
适用于源自Renderer
的任何类型。
尽管两者都是抽象的父类,但不能仅将其显式实现(例如BoxCollider
或MeshRenderer
)附加到自身。
因此,是的,您将获得PlayerController
或附加到该GameObject的其他任何类型的MinerController
组件。 null
(如果找不到)。
回答您的标题:不!
它不仅适用于任何T
,而且还适用于Component
派生的任何类类型,但是,如果尝试使用不是源自Component
的任何类型,则当然会遇到编译器错误。>