引用子类作为父类变量

时间:2019-10-17 13:40:51

标签: c# unity3d inheritance

我是新手爱好者,所以如果这是一个愚蠢的问题,请原谅我的无知。

作为推销的一部分,我正在尝试对我的游戏项目进行非常简单的演示,而我却迷住了角色。我有一个public class Character : MonoBehaviour的初学者,我想用覆盖函数创建子类。我当前的public class TrainingDummy : Character应该是一个不错的例子。我有一个单独的CombatDirector脚本,应该从一开始就从数组中产生字符。但是,我无法将我的TrainingDummy引用为Character变量。 我以为我可以将字符作为Character变量来引用,如果有更多的变量,显然这不是问题。

有什么我可以解决的吗?

1 个答案:

答案 0 :(得分:3)

这样做应该没有任何问题。让我们尝试复制您的解释。

首先,我生成CharacterTrainingDummy

Character.cs

using UnityEngine;
public class Character : MonoBehaviour 
{ 
    public virtual void MyMethod()
    {
        Debug.Log("This is a character");
    }
}

TrainingDummy.cs

using UnityEngine;
public class TrainingDummy: Character
{ 
    public override void MyMethod()
    {
        Debug.Log("This is a dummy");
    }
}

现在进入我们的CombatDirector.cs

using UnityEngine;

public class CombatDirector : MonoBehaviour
{
    public Character[] characters = new Character[2];

   void Start()
   {
       foreach (Character character in characters)
       {
            character.MyMethod();
       }
   }
}

现在只需在场景中创建三个单独的Empty GameObjects,然后向其中的每个脚本添加一个脚本即可。 CombatDirector脚本具有两个<Character>类型的元素的公共数组。但是,您应该能够将包含CharacterTrainingDummy脚本的GameObjects拖到Unity Editor中的阵列插槽中。如果您将每个放置一个并按Play,您将看到尽管数组元素被引用为Character,但仍保持与它们的类实例相对应的值,因此将在控制台中打印两条不同的消息。我希望我能说清楚。

enter image description here

enter image description here