我是新手爱好者,所以如果这是一个愚蠢的问题,请原谅我的无知。
作为推销的一部分,我正在尝试对我的游戏项目进行非常简单的演示,而我却迷住了角色。我有一个public class Character : MonoBehaviour
的初学者,我想用覆盖函数创建子类。我当前的public class TrainingDummy : Character
应该是一个不错的例子。我有一个单独的CombatDirector
脚本,应该从一开始就从数组中产生字符。但是,我无法将我的TrainingDummy
引用为Character
变量。
我以为我可以将字符作为Character
变量来引用,如果有更多的变量,显然这不是问题。
有什么我可以解决的吗?
答案 0 :(得分:3)
这样做应该没有任何问题。让我们尝试复制您的解释。
首先,我生成Character
和TrainingDummy
类
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>
类型的元素的公共数组。但是,您应该能够将包含Character
或TrainingDummy
脚本的GameObjects拖到Unity Editor
中的阵列插槽中。如果您将每个放置一个并按Play,您将看到尽管数组元素被引用为Character
,但仍保持与它们的类实例相对应的值,因此将在控制台中打印两条不同的消息。我希望我能说清楚。