2017-09-05 28 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"); 
    } 

這將在地形區域的隨機地方實例化對象。我如何實例化組中的對象?

我想在其他的時候,它不是隨機放置在一個組中的對象與兩個主要參數/變量,一個設置對象之間的空間第二個設置如何使它們在行中,例如如果在objectsToInstantiate有20個對象,我將變量設置爲4,將另一個變量設置爲10,然後對象將成爲4行,即5行,並且對象之間的間距爲10。

如果我有55個對象,我將它設置爲4行,那麼會有14行4最後一行將與3對象。

例如,在第4分的對象和5行中的空間10的塗料:

Example

而且假如有例如然後23級的對象將看起來像:

Example1

+2

如果圖像描述了你所拍攝的比代碼好,那麼這不是隨機的。爲什麼你甚至使用'隨機。範圍'這個如果他們應該是平等的間隔? – 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); 
}