C#多级继承-相同的方法



我正在使用C#为我在Unity中的项目设置一个继承系统。

实体:单一行为//类人:实体

我这样做是为了在每个类类型中设置属性,特定于游戏中的暴徒类型。

public class Entity : MonoBehaviour
{
public Animator anim;
public CapsuleCollider capsuleCollider;
void Start()
{
anim = GetComponent<Animator>();
capsuleCollider = GetComponent<CapsuleCollider>();
}
}
public class Humanoid : Entity
{
void Start()
{
capsuleCollider.radius = 0.3f;
}
}

我的问题是,Humanoid所连接的GameObject在Entity的Start方法运行后不会运行它们的Start((方法。它抛出了这个错误,因为他们试图同时运行:

UnassignedReferenceException: The variable capsuleCollider of NPC has not been assigned.

所以我不确定如何(我相信这是正确的术语(将Entity的Start((方法的末尾与Humanoid的Start.((方法挂钩。

我可以将Entity的开头改为Awake((,这可能会解决我的问题,但我想设置多个继承级别,这样就不会在所有级别之间都起作用。

我相信你指的是一个叫做多态性的面向对象编程概念。C#通过诸如virtual和override之类的关键字来支持这一点。关于C#中多态性的文档可以在这里找到。我提供了一个例子如下:

public class Entity : MonoBehaviour
{
public virtual void Start()
{
// ... code specific to Entity
}
}
public class Humanoid : Entity
{
public override void Start()
{
base.Start(); // Do Entity.Start() first, then continue with Humanoid.Start()
// ... other code specific to Humanoid
}
}

我不知道Unity引擎是否支持这一点;我想是的。

最新更新