2017-06-11 4 views
0

私は10x10の立方体のグリッドを生成します。私の細胞は異なっており、私はそれらをアレイから選択します。Unity - ループのオブジェクトを互いに間隔をあけてインスタンス化

私が必要とするのは、各セル間の小さな間隔です。

これは、だから私は試してきたもの、これまで

private void Start() 
{ 
    for (int x = 0; x < data.MapSize.x; x++) 
    { 
     for (int y = 0; y < data.MapSize.y; y++) 
     { 
      Instantiate(data.Cells[Random.Range(0, data.Cells.Length)]), new Vector3(x, 0, z), Quaternion.identity); // Create a specific cell on position (x,y) 
     } 
    } 
} 

私のコードです:

new Vector3(x + 1, 0, z + 1) 

new Vector3(x * 0.1f, 0, z * 0.1f) 

が、明らかにそれは何も変更されません。

だから私はこれを試してみた:私は、変数

int counter = 0; 

とループ内

counter += 0.1f; 
new Vector3(x + counter, 0, z + counter) 

を作成し、startメソッドの前に

が、その後何のグリッドが表示されていない、私が手平行四辺形。

+0

一貫したスペーシングが必要な場合は、カウンタをインクリメントしないでください – Absinthe

答えて

1

最初にスペースの長さを定義します。後で簡単に変更することができます。

float spacing = 0.1f; 

これを使用して目的の結果を取得します。

Instantiate(data.Cells[Random.Range(0, data.Cells.Length)]), new Vector3(x + (x*spacing), 0, y + (y*spacing)), Quaternion.identity); // Create a specific cell on position (x,y) 

私はyzを変更注意してください。

+0

ありがとうございます:) – Question3r

1

これに対する答えは、グリッドをワールドスペースに10単位だけ正確に保持するかどうかによって異なります。

グリッドのサイズが重要でない場合は、xとyの増分にパディングを追加するだけで(整数の代わりに浮動小数点を使用する)ことができます。あなたはなしスペースを作成するためにあなたがdata.Cellsに保存しているオブジェクトを縮小検討する必要があります、また

for (float x = 0; x < data.MapSize.x; x += 1.1f) 
{ 
    for (float y = 0; y < data.MapSize.y; y += 1.1f) 
    { 

:あなたも考慮に詰め物を取るためにdata.MapSizeを増加する必要がありますグリッドサイズに影響を与えます。あなたは、どちらかのプレハブを縮小、またはそれらがインスタンス化されているようにそれを行うことができます:

GameObject newCell = (GameObject)Instantiate(data.Cells[Random.Range(0, data.Cells.Length)]), new Vector3(x, 0, y), Quaternion.identity); // Create a specific cell on position (x,y) 
newCell.transform.localScale = new Vector3(0.9, 0.9, 0.9); 

編集:グリッドの最終的なサイズは関係ありませんので、もしLestatのソリューションは、最初のオプションのクリーンバージョンですxとyの変数を変更するのではなく、そのようにします。

関連する問題