2017-09-05 12 views
0
public void generateObjectOnTerrain() 
    { 
     objectPool = new ObjectPool(objectToInstantiate, objectsToInstantiate); 

     float randX = 0f; 
     float randZ = 0f; 

     for (int i = 0; i < objectsToInstantiate; i++) 
     { 
      if (random == true) 
      { 
       //Generate random x,z,y position on the terrain 
       randX = UnityEngine.Random.Range(xTerrainPos, xTerrainPos + terrainWidth); 
       randZ = UnityEngine.Random.Range(zTerrainPos, zTerrainPos + terrainLength); 
      } 
      else 
      { 

      } 

      float yVal = Terrain.activeTerrain.SampleHeight(new Vector3(randX, 0, randZ)); 

      var randScaleX = Random.Range(RandScaleMin.x, RandScaleMax.x); 
      var randScaleY = Random.Range(RandScaleMin.y, RandScaleMax.y); 
      var randScaleZ = Random.Range(RandScaleMin.z, RandScaleMax.z); 
      var randVector3 = new Vector3(randScaleX, randScaleY, randScaleZ); 

      //Apply Offset if needed 
      yVal = yVal + yOffset; 

      clonedObject = objectPool.GetInstance(); 

      if (randomScale == true) 
       clonedObject.transform.localScale = randVector3;//new Vector3(randScaleX, randScaleY, randScaleZ); 

      if (parent) 
       clonedObject.transform.parent = this.transform; 

      clonedObject.tag = "ClonedObject"; 

      clonedObject.transform.position = new Vector3(randX, yVal, randZ); 
     } 

     createdObjects = GameObject.FindGameObjectsWithTag(objname); 

     UpdateList(false, "ClonedObject"); 
    } 

これは、地形領域上のランダムな場所でオブジェクトをインスタンス化します。どのようにしてグループ内のオブジェクトをインスタンス化できますか?

2つの主なパラメータ/変数を持つグループにオブジェクトを配置するのがランダムではないときに、オブジェクト内にスペースを設定する2つ目の方法を設定します。たとえば、objectsToInstantiate 20個のオブジェクトがあり、変数を4に設定し、別の変数を10に設定すると、オブジェクトは4行に5行あり、オブジェクト間の間隔は各面から10になります。

もし私が55個のオブジェクトを持っていて、それを4行目にすると、14行目が4行、最後の行が3オブジェクトになります。

行4つのオブジェクトと10の空間に5つのラインの塗料例えば:

Example

とケース23個のオブジェクトは、例えばある、それはそのようになります。

Example1

+2

画像に、コードよりも優れた撮影方法が記載されている場合、これはランダムではありません。等間隔でなければならないのになぜあなたは 'Random.Range'を使っていますか? – Programmer

答えて

0

これはうまくいかないでしょう。

int columns = 4; 
int space = 10;//set these variables from your parameters 

Vector2 CalcPosition(int index) // call this func for all your objects 
{ 
    float posX = (index%columns)*space; 
    float posY = (index/columns)*space; 
    return new Vector2(posX, posY); 
} 
関連する問題