对于多个单元游戏的继承对象C#
虽然我拥有python的中级先进知识,但我只对新的统一体和C#有所了解。我已经了解了C#的基本元素,并且正在尝试使用Unity 2d平台创建Pong游戏。我不确定是否有两个游戏对象的清晰简洁的方式,例如main_player
和computer_player
从具有其自己定义的功能的单个类player
继承,例如, move()
?对于多个单元游戏的继承对象C#
您可以使用2种方法,抽象或接口。
public interface IMove{
void Move();
}
public class Main_player:MonoBehaviour, IMove{
public void Move(){}
}
public class Computer_player:MonoBehaviour, IMove{
public void Move(){}
}
您可以在界面上使用GetComponent,但不能在Inspector中使用插槽。接口不是可序列化的,所以你不能让它们出现在编辑器中。
为此需要摘要。
public abstract class IMove : MonoBehaviour{
public abstract void Move();
}
public sealed class Main_player: IMove{
public override void Move(){}
}
public sealed class Computer_player: IMove{
public override void Move(){}
}
无论您将Move抽象还是虚拟结果都很相似。如果你有一个默认的实现,使用virtual,如果你需要子类实现它自己的版本,那么使用abstract。
这里更多:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/abstract
你可以像这样创建一个类的玩家。
public class Player: MonoBehaviour {
public virtual void move(){
}
}
然后继承它是这样的:
public class Computer_player:Player{
public override void move(){
base.move();
//Extra movement code goes here
}
}
可以继承main_player同样的方式。 您可以在此处找到更多详细信息:https://unity3d.com/learn/tutorials/topics/scripting/inheritance
如果你所做的只是调用'base',那么没有重写方法的重点。根本不写任何东西,让正常的继承工作。 –
将Computer_player中的move()方法标记为override会更好。你的语法类似于“new void move()”,所以它隐藏了基本方法并且会产生相关的警告。这不好。因此,“移动”方法的完整声明语法必须是“public override move()” –
这不完全是我的问题,可以说'computer_player'和'main_player'在两个独立的脚本中,它们将如何继承同一个抽象类'Player '。 –
你的意思是'公共抽象类Player'作为基类,'公共类MainPlayer:Player'和'公共类ComputerPlayer:Player'? –
是的,这就是我的意思,两个单独的游戏对象从一个类继承。 –
继承是非常基本的OOP(和非常基本的C#)概念。如果你有一个关于如何正确实现你的游戏的继承树的具体问题,这是一回事,但这个问题似乎是关于继承概念本身。这是你想从一本好的教程或书中学到的东西,而不是你想要在*上要求的东西。 –