2017-03-23 7 views
0

私はタイルベースのゲームを作成しています。このゲームでは、私はボードのすべてのgameobjectsを含む行列があります。ユニットがあるタイルを選択した場合、この範囲のタイルをハイライト表示するよりも、ユニットの範囲を読みたいのですが、どうすればいいですか?範囲を持つ行列からリスト<>を取得

int xとint yは、グリッド内のタイルの位置です。 ユニットはタイルのユニットです。このメソッドは、ユニットの範囲を取得するためのものです。

private GameObject[,] grid; 
public void unitSelected(int x, int y, GameObject unit) 
{ 
    int rangeTiles = 0; 
    Units u = (Units)Enum.Parse(typeof(Units), unit.tag); 
    switch (u) 
    { 
     case Units.Lieutenent: 
      Debug.Log("Luitenant"); 
      lieutenant lieut = unit.GetComponent<lieutenant>(); 
      rangeTiles = lieut.Movement; 
      break; 
     case Units.Bom: 
      Debug.Log("Not yet implemented, Bom"); 
      break; 

    } 
    getTiles(x, y, rangeTiles); 
} 

private void getTiles(int x, int y, int moves) 
{ 
    List<GameObject> moveTiles = new List<GameObject>(); 

} 

selectedtile(int x、int y)の範囲(移動)内のすべてのタイルを取得するにはどうすればよいですか?

答えて

1

私はそれをテストしていませんが、あなたのループはこのようになります。

private void getTiles(int x, int y, int moves) 
{ 
    List<GameObject> moveTiles = new List<GameObject>(); 
    // sweep through horizontally 
    for (int i = -moves; i <= moves; i++) 
    { 
     // at each step horizontally, sweep vertically as far as allowed 
     int jRange = moves - Math.Abs(i); 
     for (int j = -jRange; j <= jRange; j++) 
     { 
      // add (i + x, j + y) to moveTiles, maybe skip when (i, j) = (0, 0)? 
     } 
    } 
} 

セルゲイの答えによれば、タイルがグリッドの内側にない場合はレンジチェックを行うようにしてください。

関連する問題