Unity C#,覆盖子类中的变量类型

问题描述 投票:0回答:1

我会尽力解释自己,但英语不是我的母语。

总而言之:我想重写子类中的变量类型或类似的东西,所以我的子类始终拥有每个类的“最新”版本。

现在,我有 2 个班级 >

Animal
AnimalAnimator
,两个班级都有自己的子班级
Dog
DogAnimator

Animal
类看起来像这样:

public class Animal : MonoBehaviour
{
    public AnimalAnimator Animator { get; private set; }

    private virtual void Awake()
    {
        Animator = GetComponent<AnimalAnimator>();
        [code...]
    }
}

我想对狗做这样的事情:

public class Dog : Animal
{
    public new DogAnimator Animator { get; private set; }

    private override void Awake()
    {
        base.Awake();

        Animator = GetComponent<AnimalAnimator>();
    }
}

我希望

Dog
扩展
Animal
,并用
AnimalAnimator
覆盖
DogAnimator
组件(扩展
DogAnimator
。但是 Unity 给了我这个错误:

The same field name is serialized multiple times in the class or its parent class. This is not supported: Base(Dog) <Animator>k__BackingField

这在 C# 中可能吗?我该如何继续?

非常感谢。

c# unity-game-engine game-development unityscript
1个回答
0
投票

您可以使用泛型,如下面的代码示例。

class Animal<TAnimator> : MonoBehaviour where TAnimator : AnimalAnimator
{
    public TAnimator Animator { get; private set; }

    public void Awake()
    {
        Animator = GetComponent<TAnimator>();
    }
}

class Dog : Animal<DogAnimator>
{
    public void Awake()
    {
        base.Awake();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.