2014-07-05 41 views
0

我在'Update()'函數中有一塊代碼,它在我的場景中獲取活動塊,當它發現塊時,它將這些座標傳遞給'generateFromMiddleOfChunk ()'功能。該函數將在玩家周圍產生3個半徑的所有塊,它通過25個「Instantiate()」函數和一個公式來實現。但它只應該實例化沒有塊的塊。它不這樣做,如果有人可以看看我的代碼,我將不勝感激。對於非常重複的代碼和Debug.Log()函數,我很抱歉。非常感謝每一個幫助,非常感謝。Unity3d地形生成實例化到很多預製

爾迪,

我有這個代碼塊在我Update()功能:

function Update() { 
    var gameObjects : GameObject[] = FindObjectsOfType(GameObject) as GameObject[]; 
    for (var i = 0; i < gameObjects.length ; i++) { 
     if(gameObjects[i].name.Substring(0,6) == "ACTIVE") 
      if(gameObjects[i].tag != "Player") { 
      var xco = gameObjects[i].transform.position.x; 
      var yco = gameObjects[i].transform.position.y; 
      var zco = gameObjects[i].transform.position.z; 
      Debug.Log(xco.ToString()+yco.ToString()+zco.ToString()); 
      generateFromMiddleOfChunk(xco, yco, zco); 
      }     
    } 
} 

代碼的此塊獲得一塊在我的場景,並得到它的x,y和z座標,它將這些座標傳遞給generateFromMiddleOfChunk()函數。這個功能看起來是這樣的:

function generateFromMiddleOfChunk(xco : int, yco : int, zco : int) { 
    //V1 
    chunk1 = "Chunk (" + xco.ToString() + ", " + yco.ToString() + ", " + zco.ToString() + ")"; 
    chunk2 = "Chunk (" + (xco + chunkWidth).ToString() + ", " + yco.ToString() + ", " + (zco+chunkWidth).ToString() + ")"; 
    chunk3 = "Chunk (" + (xco + chunkWidth).ToString() + ", " + yco.ToString() + ", " + zco.ToString() + ")"; 
    chunk4 = "Chunk (" + (xco + chunkWidth).ToString() + ", " + yco.ToString() + ", " + (zco * -1).ToString() + ")"; 
    chunk5 = "Chunk (" + (xco + chunkWidth * -1).ToString() + ", " + yco.ToString() + ", " + (zco+chunkWidth).ToString() + ")"; 
    chunk6 = "Chunk (" + (xco + chunkWidth * -1).ToString() + ", " + yco.ToString() + ", " + zco.ToString() + ")"; 
    chunk7 = "Chunk (" + (xco + chunkWidth * -1).ToString() + ", " + yco.ToString() + ", " + (zco * -1).ToString() + ")"; 
    chunk8 = "Chunk (" + xco.ToString() + ", " + yco.ToString() + ", " + (zco + chunkWidth).ToString() + ")"; 
    chunk9 = "Chunk (" + xco.ToString() + ", " + yco.ToString() + ", " + (zco * -1).ToString() + ")"; 
    chunk10= "Chunk (" + (xco + chunkWidth * -2).ToString() + ", " + yco.ToString() + ", " + (zco + 2 * chunkWidth).ToString() + ")"; 
    chunk11= "Chunk (" + (xco + chunkWidth * -2).ToString() + ", " + yco.ToString() + ", " + (zco + chunkWidth).ToString() + ")"; 
    chunk12= "Chunk (" + (xco + chunkWidth * -2).ToString() + ", " + yco.ToString() + ", " + zco.ToString() + ")"; 
    chunk13= "Chunk (" + (xco + chunkWidth * -2).ToString() + ", " + yco.ToString() + ", " + (zco * -1).ToString() + ")"; 
    chunk14= "Chunk (" + (xco + chunkWidth * -2).ToString() + ", " + yco.ToString() + ", " + (zco + -2 * chunkWidth).ToString() + ")"; 
    chunk15= "Chunk (" + (xco + chunkWidth * -1).ToString() + ", " + yco.ToString() + ", " + (zco + 2 * chunkWidth).ToString() + ")"; 
    chunk16= "Chunk (" + (xco + chunkWidth * -1).ToString() + ", " + yco.ToString() + ", " + (zco + -2 * chunkWidth).ToString() + ")"; 
    chunk17= "Chunk (" + xco.ToString() + ", " + yco.ToString() + ", " + (zco + 2 * chunkWidth).ToString() + ")"; 
    chunk18= "Chunk (" + xco.ToString() + ", " + yco.ToString() + ", " + (zco + -2 * chunkWidth).ToString() + ")"; 
    chunk19= "Chunk (" + (xco + chunkWidth).ToString() + ", " + yco.ToString() + ", " + (zco + 2 * chunkWidth).ToString() + ")"; 
    chunk20= "Chunk (" + (xco + chunkWidth).ToString() + ", " + yco.ToString() + ", " + (zco + -2 * chunkWidth).ToString() + ")"; 
    chunk21= "Chunk (" + (xco + 2 * chunkWidth).ToString() + ", " + yco.ToString() + ", " + (zco + 2 * chunkWidth).ToString() + ")"; 
    chunk22= "Chunk (" + (xco + 2 * chunkWidth).ToString() + ", " + yco.ToString() + ", " + (zco + chunkWidth).ToString() + ")"; 
    chunk23= "Chunk (" + (xco + 2 * chunkWidth).ToString() + ", " + yco.ToString() + ", " + zco.ToString() + ")"; 
    chunk24= "Chunk (" + (xco + 2 * chunkWidth).ToString() + ", " + yco.ToString() + ", " + (zco * -1).ToString() + ")"; 
    chunk25= "Chunk (" + (xco + 2 * chunkWidth).ToString() + ", " + yco.ToString() + ", " + (zco + -2 * chunkWidth).ToString() + ")"; 

    var chunksInScene : GameObject[] = FindObjectsOfType(GameObject) as GameObject[]; 

    for (var i = 0; i < chunksInScene.length ; i++) { 
     if(chunksInScene[i].name.Substring(0,5) == "Chunk" || chunksInScene[i].name.Substring(0,5) == "_TERR" || chunksInScene[i].name.Substring(0,5) == "ACTIV") { 
      if(chunksInScene[i].tag != "Player") { 
        var oldXco = chunksInScene[i].transform.position.x; 
        var oldYco = chunksInScene[i].transform.position.y; 
        var oldZco = chunksInScene[i].transform.position.z; 

        oldChunk1 = "Chunk (" + oldXco.ToString() + ", " + oldYco.ToString() + ", " + oldZco.ToString() + ")"; 
        oldChunk2 = "Chunk (" + (oldXco + chunkWidth).ToString() + ", " + oldYco.ToString() + ", " + (oldZco+chunkWidth).ToString() + ")"; 
        oldChunk3 = "Chunk (" + (oldXco + chunkWidth).ToString() + ", " + oldYco.ToString() + ", " + oldZco.ToString() + ")"; 
        oldChunk4 = "Chunk (" + (oldXco + chunkWidth).ToString() + ", " + oldYco.ToString() + ", " + (oldZco * -1).ToString() + ")"; 
        oldChunk5 = "Chunk (" + (oldXco + chunkWidth * -1).ToString() + ", " + oldYco.ToString() + ", " + (oldZco+chunkWidth).ToString() + ")"; 
        oldChunk6 = "Chunk (" + (oldXco + chunkWidth * -1).ToString() + ", " + oldYco.ToString() + ", " + oldZco.ToString() + ")"; 
        oldChunk7 = "Chunk (" + (oldXco + chunkWidth * -1).ToString() + ", " + oldYco.ToString() + ", " + (oldZco * -1).ToString() + ")"; 
        oldChunk8 = "Chunk (" + oldXco.ToString() + ", " + oldYco.ToString() + ", " + (oldZco + chunkWidth).ToString() + ")"; 
        oldChunk9 = "Chunk (" + oldXco.ToString() + ", " + oldYco.ToString() + ", " + (oldZco * -1).ToString() + ")"; 
        oldChunk10= "Chunk (" + (oldXco + chunkWidth * -2).ToString() + ", " + oldYco.ToString() + ", " + (oldZco + 2 * chunkWidth).ToString() + ")"; 
        oldChunk11= "Chunk (" + (oldXco + chunkWidth * -2).ToString() + ", " + oldYco.ToString() + ", " + (oldZco + chunkWidth).ToString() + ")"; 
        oldChunk12= "Chunk (" + (oldXco + chunkWidth * -2).ToString() + ", " + oldYco.ToString() + ", " + oldZco.ToString() + ")"; 
        oldChunk13= "Chunk (" + (oldXco + chunkWidth * -2).ToString() + ", " + oldYco.ToString() + ", " + (oldZco * -1).ToString() + ")"; 
        oldChunk14= "Chunk (" + (oldXco + chunkWidth * -2).ToString() + ", " + oldYco.ToString() + ", " + (oldZco + -2 * chunkWidth).ToString() + ")"; 
        oldChunk15= "Chunk (" + (oldXco + chunkWidth * -1).ToString() + ", " + oldYco.ToString() + ", " + (oldZco + 2 * chunkWidth).ToString() + ")"; 
        oldChunk16= "Chunk (" + (oldXco + chunkWidth * -1).ToString() + ", " + oldYco.ToString() + ", " + (oldZco + -2 * chunkWidth).ToString() + ")"; 
        oldChunk17= "Chunk (" + oldXco.ToString() + ", " + oldYco.ToString() + ", " + (oldZco + 2 * chunkWidth).ToString() + ")"; 
        oldChunk18= "Chunk (" + oldXco.ToString() + ", " + oldYco.ToString() + ", " + (oldZco + -2 * chunkWidth).ToString() + ")"; 
        oldChunk19= "Chunk (" + (oldXco + chunkWidth).ToString() + ", " + oldYco.ToString() + ", " + (oldZco + 2 * chunkWidth).ToString() + ")"; 
        oldChunk20= "Chunk (" + (oldXco + chunkWidth).ToString() + ", " + oldYco.ToString() + ", " + (oldZco + -2 * chunkWidth).ToString() + ")"; 
        oldChunk21= "Chunk (" + (oldXco + 2 * chunkWidth).ToString() + ", " + oldYco.ToString() + ", " + (oldZco + 2 * chunkWidth).ToString() + ")"; 
        oldChunk22= "Chunk (" + (oldXco + 2 * chunkWidth).ToString() + ", " + oldYco.ToString() + ", " + (oldZco + chunkWidth).ToString() + ")"; 
        oldChunk23= "Chunk (" + (oldXco + 2 * chunkWidth).ToString() + ", " + oldYco.ToString() + ", " + oldZco.ToString() + ")"; 
        oldChunk24= "Chunk (" + (oldXco + 2 * chunkWidth).ToString() + ", " + oldYco.ToString() + ", " + (oldZco * -1).ToString() + ")"; 
        oldChunk25= "Chunk (" + (oldXco + 2 * chunkWidth).ToString() + ", " + oldYco.ToString() + ", " + (oldZco + -2 * chunkWidth).ToString() + ")"; 
      } 
     } 
    } 

    if(oldChunk1.Equals(chunk1)){load1 = false;} 
    if(oldChunk2.Equals(chunk2)){load2 = false;} 
    if(oldChunk3.Equals(chunk3)){load3 = false;} 
    if(oldChunk4.Equals(chunk4)){load4 = false;} 
    if(oldChunk5.Equals(chunk5)){load5 = false;} 
    if(oldChunk6.Equals(chunk6)){load6 = false;} 
    if(oldChunk7.Equals(chunk7)){load7 = false;} 
    if(oldChunk8.Equals(chunk8)){load8 = false;} 
    if(oldChunk9.Equals(chunk9)){load9 = false;} 
    if(oldChunk10.Equals(chunk10)){load10 = false;} 
    if(oldChunk11.Equals(chunk11)){load11 = false;} 
    if(oldChunk12.Equals(chunk12)){load12 = false;} 
    if(oldChunk13.Equals(chunk13)){load13 = false;} 
    if(oldChunk14.Equals(chunk14)){load14 = false;} 
    if(oldChunk15.Equals(chunk15)){load15 = false;} 
    if(oldChunk16.Equals(chunk16)){load16 = false;} 
    if(oldChunk17.Equals(chunk17)){load17 = false;} 
    if(oldChunk18.Equals(chunk18)){load18 = false;} 
    if(oldChunk19.Equals(chunk19)){load19 = false;} 
    if(oldChunk20.Equals(chunk20)){load20 = false;} 
    if(oldChunk21.Equals(chunk21)){load21 = false;} 
    if(oldChunk22.Equals(chunk22)){load22 = false;} 
    if(oldChunk23.Equals(chunk23)){load23 = false;} 
    if(oldChunk24.Equals(chunk24)){load24 = false;} 
    if(oldChunk25.Equals(chunk25)){load25 = false;} 
    Debug.Log("1" + chunk1 + oldChunk1 + load1); 
    Debug.Log("2" + chunk2 + oldChunk2 + load2); 
    Debug.Log("3" + chunk3 + oldChunk3 + load3); 
    Debug.Log("4" + chunk4 + oldChunk4 + load4); 
    Debug.Log("5" + chunk5 + oldChunk5 + load5); 
    Debug.Log("6" + chunk6 + oldChunk6 + load6); 
    Debug.Log("7" + chunk7 + oldChunk7 + load7); 
    Debug.Log("8" + chunk8 + oldChunk8 + load8); 
    Debug.Log("9" + chunk9 + oldChunk9 + load9); 
    Debug.Log("10" + chunk10 + oldChunk10 + load10); 
    Debug.Log("11" + chunk11 + oldChunk11 + load11); 
    Debug.Log("12" + chunk12 + oldChunk12 + load12); 
    Debug.Log("13" + chunk13 + oldChunk13 + load13); 
    Debug.Log("14" + chunk14 + oldChunk14 + load14); 
    Debug.Log("15" + chunk15 + oldChunk15 + load15); 
    Debug.Log("16" + chunk16 + oldChunk16 + load16); 
    Debug.Log("17" + chunk17 + oldChunk17 + load17); 
    Debug.Log("18" + chunk18 + oldChunk18 + load18); 
    Debug.Log("19" + chunk19 + oldChunk19 + load19); 
    Debug.Log("20" + chunk20 + oldChunk20 + load20); 
    Debug.Log("21" + chunk21 + oldChunk21 + load21); 
    Debug.Log("22" + chunk22 + oldChunk22 + load22); 
    Debug.Log("23" + chunk23 + oldChunk23 + load23); 
    Debug.Log("24" + chunk24 + oldChunk24 + load24); 
    Debug.Log("25" + chunk25 + oldChunk25 + load25); 
    /*  
    //V1 
    if(load1){Instantiate(terrains[Random.Range(0,terrains.length)], Vector3(xco, yco, zco), Quaternion.identity);} 
    //V2 
    if(load2){Instantiate(terrains[Random.Range(0,terrains.length)], Vector3(xco + chunkWidth, yco, zco + chunkWidth), Quaternion.identity);} 
    if(load3){Instantiate(terrains[Random.Range(0,terrains.length)], Vector3(xco + chunkWidth, yco, zco), Quaternion.identity);} 
    if(load4){Instantiate(terrains[Random.Range(0,terrains.length)], Vector3(xco + chunkWidth, yco, zco * -1), Quaternion.identity);} 
    if(load5){Instantiate(terrains[Random.Range(0,terrains.length)], Vector3(xco + chunkWidth * -1, yco, zco + chunkWidth), Quaternion.identity);} 
    if(load6){Instantiate(terrains[Random.Range(0,terrains.length)], Vector3(xco + chunkWidth * -1, yco, zco), Quaternion.identity);} 
    if(load7){Instantiate(terrains[Random.Range(0,terrains.length)], Vector3(xco + chunkWidth * -1, yco, zco * -1), Quaternion.identity);} 
    if(load8){Instantiate(terrains[Random.Range(0,terrains.length)], Vector3(xco, yco, zco + chunkWidth), Quaternion.identity);} 
    if(load9){Instantiate(terrains[Random.Range(0,terrains.length)], Vector3(xco, yco, zco * -1), Quaternion.identity);} 
    //V3 
    if(load10){Instantiate(terrains[Random.Range(0,terrains.length)], Vector3(xco + chunkWidth * -2, yco, zco + 2 * chunkWidth), Quaternion.identity);} 
    if(load11){Instantiate(terrains[Random.Range(0,terrains.length)], Vector3(xco + chunkWidth * -2, yco, zco + chunkWidth), Quaternion.identity);} 
    if(load12){Instantiate(terrains[Random.Range(0,terrains.length)], Vector3(xco + chunkWidth * -2, yco, zco), Quaternion.identity);} 
    if(load13){Instantiate(terrains[Random.Range(0,terrains.length)], Vector3(xco + chunkWidth * -2, yco, zco * -1), Quaternion.identity);} 
    if(load14){Instantiate(terrains[Random.Range(0,terrains.length)], Vector3(xco + chunkWidth * -2, yco, zco + -2 * chunkWidth), Quaternion.identity);} 
    if(load15){Instantiate(terrains[Random.Range(0,terrains.length)], Vector3(xco + chunkWidth * -1, yco, zco + 2 * chunkWidth), Quaternion.identity);} 
    if(load16){Instantiate(terrains[Random.Range(0,terrains.length)], Vector3(xco + chunkWidth * -1, yco, zco + -2 * chunkWidth), Quaternion.identity);} 
    if(load17){Instantiate(terrains[Random.Range(0,terrains.length)], Vector3(xco, yco, zco + 2 * chunkWidth), Quaternion.identity);} 
    if(load18){Instantiate(terrains[Random.Range(0,terrains.length)], Vector3(xco, yco, zco + -2 * chunkWidth), Quaternion.identity);} 
    if(load19){Instantiate(terrains[Random.Range(0,terrains.length)], Vector3(xco + chunkWidth, yco, zco + 2 * chunkWidth), Quaternion.identity);} 
    if(load20){Instantiate(terrains[Random.Range(0,terrains.length)], Vector3(xco + chunkWidth, yco, zco + -2 * chunkWidth), Quaternion.identity);} 
    if(load21){Instantiate(terrains[Random.Range(0,terrains.length)], Vector3(xco + 2 * chunkWidth, yco, zco + 2 * chunkWidth), Quaternion.identity);} 
    if(load22){Instantiate(terrains[Random.Range(0,terrains.length)], Vector3(xco + 2 * chunkWidth, yco, zco + chunkWidth), Quaternion.identity);} 
    if(load23){Instantiate(terrains[Random.Range(0,terrains.length)], Vector3(xco + 2 * chunkWidth, yco, zco), Quaternion.identity);} 
    if(load24){Instantiate(terrains[Random.Range(0,terrains.length)], Vector3(xco + 2 * chunkWidth, yco, zco * -1), Quaternion.identity);} 
    if(load25){Instantiate(terrains[Random.Range(0,terrains.length)], Vector3(xco + 2 * chunkWidth, yco, zco + -2 * chunkWidth), Quaternion.identity);}  
    */ 
} 
+0

哇......有這樣一個更容易和更高效的方式...谷歌體素地形生成:) – Savlon

+0

嗯,我明白了,這確實更容易使,但我不希望我的地形是塊狀的 – Jordi

+0

哦......我以爲你正在做一個被阻擋的地形,因爲在這個問題題目中的「立方體」......正常地形的概念仍然類似,所以你可以利用剛剛改變的相同技術... – Savlon

回答