2017-06-11 18 views
0

まず、いくつかの文脈を与えたいと思います。私は2つの異なるクラス(クラスPlayerとクラスEnemy)を持っています、各クラスは異なるデータを含んでいますが、どちらも値 "int Initiative"を保持しています。私のプロジェクトで異なるオブジェクトの2つのリストを1つにマージします。 C#Unity2D

public class Enemy : MonoBehaviour 
{ 

    public int initiative; 
    //More code 

} 
public class Player : MonoBehaviour 
{ 

    public int initiative; 
    //More code 
} 

私は両方のクラスから、いくつかのユニットを持っており、彼らは

private List<Player> players;       
private List<Enemy> enemies; 

void Awake() 
{ 
    players = new List<Player>(); 
    enemies = new List<Enemy>(); 
} 

はコードに示されていないオブジェクトの2つの異なるリストに保存されているが、各ユニットが送信され、上storagedされていますそのクラスに応じたリスト。

今、私の質問:

は、すべての異なるオブジェクトを維持する1つのリストに、両方のリストを組み合わせる方法はありますか? (私はこれをやろうとしましたが、遠くにいっていませんでした)

異なるタイプのオブジェクトが含まれているため両方のリストを組み合わせる方法がない場合は、intイニシアチブ以前のリストの位置だけでなく、オブジェクトも同じですか? (可能であれば、いくつかのコードでこれを達成する方法を教えてください)

これで私はいくつかの種類のシステムを作成しようとしています

私はC#で非常に新しいですし、一般的にコーディングしていますので、質問があまりにも単純な場合は私を許してください、またはしないでください

ありがとうございます。

+0

リストコレクション –

答えて

3

あなたはこのような何か行うことができます:ここでは

public class MonoBehaviour 
{ 
    public int initiative;//Since you are using inheritance this can be set here 
} 
public class Enemy : MonoBehaviour 
{ 
    //More code 
} 
public class Player : MonoBehaviour 
{ 
    //More code 
} 

は、1つのリストにそれらをマージするためのコードです:

List<MonoBehaviour> list = new List<MonoBehaviour>() 
list.Add(new Enemy()); 
list.Add(new Player()); 

あなたは違ったどこか例えば、あなたがメソッドを作成し、それらを処理したいです

void ProcessList(List<MonoBehaviour> list) 
{ 
    foreach(var l in list) 
    { 
     if(l is Enemy) 
     { 
      var enemy = (Enemy) l; 
      //process the enemy 
     } 
     else 
     { 
      var player = (Player) l; 
      //process as a player 
     } 
    } 
} 
+0

これは私が必要なものです、ありがとうございます –

+0

喜んでそれが正しい答えとしてそれをマークしてくださいすることができます:) –

1

継承を使用できます。 EnemyPlayerの両方を持つベース。

public class AliveEntity 
{ 
    public string Name {get;set;} 
    public double HP {get;set;} 
} 
public class Player : AliveEntity 
{ /*...*/ } 
public class Enemy : AliveEntity 
{ /*...*/ } 

リストはList<AliveEntity>です。

関連する問題