GetComponent <T>()是否可用于T扩展类?

时间:2020-01-09 10:21:53

标签: c# unity3d

我正在与3个人组成的团队为上一个本科生设计一款游戏。

类和脚本

有人制作了3个脚本:

  • MinerController.cs
  • PlayerController.cs
  • PlayerPhysic.cs

MinerController扩展MonoBehavior
PlayerController扩展MinerController

PlayerPhysic扩展MonoBehavior

示例和问题

如果我将PlayerController.csPlayerPhysic.cs附加到我的gameObject并在PlayerPhysic.cs内执行此操作:

public void Awake()
{
    minerController = GetComponent<MinerController>();
}

我会得到nullPlayerController以及为什么会这样吗?

1 个答案:

答案 0 :(得分:3)

之所以有效,是因为PlayerController的类型为MinerController,或者更好的说它是从中派生的。

这是相同的方式,例如GetComponent<Collider>适用于源自Collider的任何类型,或者GetComponent<Renderer>适用于源自Renderer的任何类型。

尽管两者都是抽象的父类,但不能仅将其显式实现(例如BoxColliderMeshRenderer)附加到自身。


因此,是的,您将获得PlayerController或附加到该GameObject的其他任何类型的MinerController组件。 null(如果找不到)。

回答您的标题:不! 它不仅适用于任何T,而且还适用于Component派生的任何类类型,但是,如果尝试使用不是源自Component的任何类型,则当然会遇到编译器错误。

相关问题