对于多个单元游戏的继承对象C#

问题描述:

虽然我拥有python的中级先进知识,但我只对新的统一体和C#有所了解。我已经了解了C#的基本元素,并且正在尝试使用Unity 2d平台创建Pong游戏。我不确定是否有两个游戏对象的清晰简洁的方式,例如main_playercomputer_player从具有其自己定义的功能的单个类player继承,例如, move()对于多个单元游戏的继承对象C#

+0

你的意思是'公共抽象类Player'作为基类,'公共类MainPlayer:Player'和'公共类ComputerPlayer:Player'? –

+0

是的,这就是我的意思,两个单独的游戏对象从一个类继承。 –

+3

继承是非常基本的OOP(和非常基本的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

+0

如果你所做的只是调用'base',那么没有重写方法的重点。根本不写任何东西,让正常的继承工作。 –

+0

将Computer_player中的move()方法标记为override会更好。你的语法类似于“new void move()”,所以它隐藏了基本方法并且会产生相关的警告。这不好。因此,“移动”方法的完整声明语法必须是“public override move()” –

+0

这不完全是我的问题,可以说'computer_player'和'main_player'在两个独立的脚本中,它们将如何继承同一个抽象类'Player '。 –