我正在使用C#在Unity中为我的项目设置一个继承系统。
实体: MonoBehaviour // Humanoid :实体
我这样做是为了可以在每个职业类型中设置属性,具体到游戏中的暴徒类型。
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;
}
}我的问题是,在Entity的start方法运行之后,附加到GameObject的人形将不会运行它们的Start()方法。它抛出这个错误,因为它们试图同时运行:
UnassignedReferenceException: The variable capsuleCollider of NPC has not been assigned.所以我不确定如何用我的类人机器人的Start()方法连接到实体的Start()方法的结尾(我相信这是正确的术语)。
我可以将Entity的start ()更改为Awake(),这可能会解决我的问题,但我想设置多个继承级别,这样就不会在所有级别之间起作用。
发布于 2020-03-30 05:06:45
我相信你所指的是一个叫做多态的面向对象的编程概念。C#通过诸如virtual和override之类的关键字支持这一点。有关C#中多态性的文档可以在here中找到。下面我提供了一个例子:
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引擎是否支持这一点;我想是的。
https://stackoverflow.com/questions/60920621
复制相似问题