2017-10-16 10 views
0

私はPythonの中間的な高度な知識を持っていますが、私はユニティとC#の初心者です。私はC#の基本的な要素を学び、現在Unity 2dプラットフォームを使用してPongのゲームを作成しようとしています。たとえば、2つのゲームオブジェクトに対してきれいで簡潔な方法があるかどうかは不明です。 main_playerおよびcomputer_playerは、それ自身の定義された機能を有する単一のクラスplayerから継承する。 move()複数のユニティgameObjectsの継承C#

+0

あなたは、基本クラス、'パブリッククラスMainPlayerとして 'パブリック抽象クラスPlayer'を意味ですか? –

+0

はい、つまり、2つの別々のゲームオブジェクトが1つのクラスから継承するということです。 –

+3

継承は非常に基本的なOOP(と非常に基本的なC#)のコンセプトです。あなたのゲームの継承ツリーを正しく実装する方法について、具体的な質問がありますが、この質問は継承コンセプト自体に関するものです。これは、あなたが良いチュートリアルや本から習得したいものであり、StackOverflowで尋ねたいものではありません。 –

答えて

1

抽象的またはインターフェースの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を使用することができますが、インスペクタ内のスロットを使用することはできません。インターフェイスはシリアル化できないため、エディタに表示することはできません。

この場合、要約が必要です。

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(){} 
} 

抽象化または仮想化を行うかどうかは、結果がかなり似ています。デフォルトの実装がある場合は、サブクラスに独自のバージョンを実装する必要がある場合はvirtualを使用し、次にabstractを使用します。

ここ

より:Player`、と `パブリッククラスComputerPlayer:Player` https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/abstract

1

このようなクラスプレーヤーを作成できます。

public class Player: MonoBehaviour { 
    public virtual void move(){ 
    } 
} 

次に、このようにそれを継承する:あなたはmain_playerを継承することができます

public class Computer_player:Player{ 
    public override void move(){ 
     base.move(); 
     //Extra movement code goes here  
    } 
} 

同じように。 ここで詳細を見つけることができます:https://unity3d.com/learn/tutorials/topics/scripting/inheritance

+0

あなたがしていることが 'base'を呼び出すならば、メソッドをオーバーライドするポイントはありません。単純に何も書いておらず、通常の継承を働かせてください。 –

+0

Move()メソッドをオーバーライドとしてComputer_playerにマークする方が良いです。あなたの構文は "new void move()"と似ているので、基本メソッドを隠して、関連する警告を生成します。それは良くない。 "move"メソッドの完全な宣言構文は "public override move()"でなければなりません –

+0

これは私の問題ではなく、 'computer_player'と' main_player'が2つの別々のスクリプトに入っているとします。同じ抽象クラス 'Player '。 –