首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#多级继承-相同的方法

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

Stack Overflow用户
提问于 2020-03-30 04:57:04
回答 1查看 145关注 0票数 0

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

实体: MonoBehaviour // Humanoid :实体

我这样做是为了可以在每个职业类型中设置属性,具体到游戏中的暴徒类型。

代码语言:javascript
运行
复制
public class Entity : MonoBehaviour
{
    public Animator anim;
    public CapsuleCollider capsuleCollider;
    void Start()
    {
        anim = GetComponent<Animator>();
        capsuleCollider = GetComponent<CapsuleCollider>();
    }
}
代码语言:javascript
运行
复制
public class Humanoid : Entity
{
    void Start()
    {
        capsuleCollider.radius = 0.3f;
    }
}

我的问题是,在Entity的start方法运行之后,附加到GameObject的人形将不会运行它们的Start()方法。它抛出这个错误,因为它们试图同时运行:

代码语言:javascript
运行
复制
UnassignedReferenceException: The variable capsuleCollider of NPC has not been assigned.

所以我不确定如何用我的类人机器人的Start()方法连接到实体的Start()方法的结尾(我相信这是正确的术语)。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-30 05:06:45

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

代码语言:javascript
运行
复制
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引擎是否支持这一点;我想是的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60920621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档