#algorithm #unity3d #unityscript
#алгоритм #unity-игровой движок #unityscript
Вопрос:
У меня есть блок кода в моей функции ‘Update ()’, которая получает активный фрагмент в моей сцене, когда она находит этот фрагмент, она передает эти координаты функции ‘generateFromMiddleOfChunk ()’. Эта функция будет генерировать все фрагменты в радиусе 3 вокруг проигрывателя, она делает это с помощью 25 функций ‘Instantiate ()’ и формулы. Но он должен создавать экземпляры только тех фрагментов, где их еще нет. Он этого не делает, если бы кто-нибудь мог взглянуть на мой код, я был бы очень признателен за это. Прошу прощения за очень повторяющийся код и множество Debug.Log()
функций. Мы высоко ценим любую помощь, большое вам спасибо.
Джорди,
У меня есть этот блок кода в моей 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);}
*/
}
Комментарии:
1. Вау… Существует гораздо более простой и эффективный способ сделать это… Генерация рельефа Google voxel
![]()
2. Хммм, я вижу, это действительно намного проще сделать, но я не хочу, чтобы мой ландшафт был блочным
3. Ох… Я предположил, что вы делаете заблокированный ландшафт из-за «куба», который находится в названии этого вопроса… Концепция для обычного ландшафта по-прежнему аналогична, так что вы могли бы разобраться с этим, используя те же методы, которые только что изменили…
4. Хорошо, спасибо вам за вашу помощь
Но видите ли вы что-нибудь, что могло бы вызвать это странное поведение? Я изменю название, это действительно сбивает с толку.
5. Извините, понятия не имею. Я только что удалил тег javascript, поскольку unityscript не является javascript
Ответ №1:
http://answers.unity3d.com/questions/177931/tutorial-minecraft-chunks.html
Это ссылка на UnityAnswers с руководством о том, как создавать фрагменты в Unity3D. Вы можете посмотреть там больше информации и, надеюсь, получить ответ на свой вопрос.