chefselber Geschrieben 4. Februar 2018 Melden Share Geschrieben 4. Februar 2018 Hallo, ich kann mit Sphere´s Löcher in den Boden schiessen. Diese sollen aber beim Start wieder ausgeglichen werden. Benutze diesen Code: private Terrain boden; private int heightmapheight; private int heightmapwidth; private TerrainData terraindata; private float[,] heights; private bool hit = false; float x; void Start() { boden = GetComponent<Terrain>(); terraindata = boden.terrainData; heightmapheight = terraindata.heightmapHeight; heightmapwidth = terraindata.heightmapWidth; heights = terraindata.GetHeights(0, 0, heightmapwidth, heightmapheight); float[,] temp = new float[1, 1]; // [1,1] temp[0, 0] = 0.039f; // 0.038 for (int x = 200; x <=250; x++) for (int y = 200; y <= 250; y++) { terraindata.SetHeights(x, y, temp); Debug.Log(x+" "+ y); } } Das Spiel braucht schon ne ganze Zeit zum Laden. Kennt jemand einen anderen Weg? MfG Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
chefselber Geschrieben 4. Februar 2018 Autor Melden Share Geschrieben 4. Februar 2018 Keiner eine Idee? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 4. Februar 2018 Melden Share Geschrieben 4. Februar 2018 Naja, wenn du die Löcher in ein Terrain hauen willst geht es wohl nur über die Heightmap des Terrain. Was schwebt dir vor, ein anderes Setzen der Heightmap? Hier sind ein paar Codeschnipsel zum Testen:https://answers.unity.com/questions/11093/modifying-terrain-height-under-a-gameobject-at-run.html Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 8. Februar 2018 Melden Share Geschrieben 8. Februar 2018 Wie schon im Link von Zer0 gezeigt. Füll zuerst ein Array // we set each sample of the terrain in the size to the desired height for (int i=0; i<size; i++) for (int j=0; j<size; j++) heights[i,j] = desiredHeight; // go raising the terrain slowly desiredHeight += Time.deltaTime; und erst dann setz die Höhen ins Terrain // set the new height terr.terrainData.SetHeights(posXInTerrain-offset,posYInTerrain-offset,heights); Müsste schneller sein... Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 8. Februar 2018 Melden Share Geschrieben 8. Februar 2018 Hab dir jetzt schnell meine Funktion rausgesucht: public float[,] resetheights = new float[64, 64]; public void ResetHeights() // FOR TESTING, reset to flat terrain { int x; int z; for (z = 0; z < terrain.terrainData.heightmapHeight; z++) { for (x = 0; x < terrain.terrainData.heightmapWidth; x++) { resetheights[z, x] = 0; } } terrain.terrainData.SetHeights(0, 0, resetheights); } lg Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
chefselber Geschrieben 10. Februar 2018 Autor Melden Share Geschrieben 10. Februar 2018 Danke schonmal für die Antworten. Werde ich heute Mal testen. Warum float[64,64] ? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 10. Februar 2018 Melden Share Geschrieben 10. Februar 2018 64,64 ist y,x = Höhe, Breite des Bereiches wenn ich nicht falsch liege. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 15. Februar 2018 Melden Share Geschrieben 15. Februar 2018 Richtig... in meinem Fall ist es halt 64x64 groß und immer gleich - deshalb so fixiert. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.