Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »techtreedev« (28.12.2016, 22:59)
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »techtreedev« (29.12.2016, 01:23)
Da ich noch recht neu in Unity bin wäre die konkrete Umsetzung das Problem. Mit einem modell würd ich einfach am Colliderpunkt eine Instanz spawnen und das wars. WIe kann ich dem Fall die Heightmap anhand von Winkel und Geschwindigkeit ändern? Das ist für mich nur schwer nachvollziehbar. Die API ist mit den einen oder zwei Sätzen pro Funktion auch nicht gerade hifreich. Lade ich eine Vorgefertigte Map/Brush drüber oder wie funktioniert das?
Angenommen, ich habe jetzt einen Vector3 als Hitpoint, wie fahre ich da fort? Zusätzliche habe ich eine Heightmap eines potentiellen Kraters.
C#-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
void CrateIntoTerrain(TerrainData terrain, int offsetX, int offsetY, int areaX, int areaY, float height) { float[,] area = new float[areaX, areaY]; for (int x = 0; x < area.GetLength(0); x++) { for (int y = 0; y < area.GetLength(1); y++) { area[x, y] = height; } } data.SetHeights(offsetX, offsetY, area); float[,,] splat = new float[areaX, areaY, 2]; for (int x = 0; x < splat.GetLength(0); x++) { for (int y = 0; y < splat.GetLength(1); y++) { splat[x, y, 0] = 0.0f; splat[x, y, 1] = 1.0f; //du kannst die Intensität der Texturen auch mittels der Höhe setzen: //splat[x, y, 0] = height; //splat[x, y, 1] = 1 - height; } } data.SetAlphamaps(offsetX, offsetY, splat); } |
Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von »Renegade« (29.12.2016, 21:54)
Hey, danke für die Antwort.
2 Dinge.
1.) ist mir schon mit meinem Prefab Workaround aufgefallen; warum akzeptieren die TerrainData Methoden nur Integer?
2.) float[,,], was bewirkt das? sieht sehr interessant aus. Um ein begrenztes Array zu erzeugen?
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Renegade« (02.01.2017, 18:19)
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Nicht ganz exakt, oder? Immerhin ist der Maximalwert ja nur 255 und nicht 256. Folglich ist 128 etwas mehr als die Hälfte.Dann wäre auf der Heightmap Grau (der Wert 128 ) exakt auf 300 Unity-Enheiten an dieser Stelle.
Zitat
(Heightmaps sind immer Grafiken im Graustufen-Format, da tiefster Punkt == 0 == schwarz und höchster Punkt == weiß == 256)
Nicht ganz exakt, oder? Immerhin ist der Maximalwert ja nur 255 und nicht 256. Folglich ist 128 etwas mehr als die Hälfte.Dann wäre auf der Heightmap Grau (der Wert 128 ) exakt auf 300 Unity-Enheiten an dieser Stelle.
Zitat
(Heightmaps sind immer Grafiken im Graustufen-Format, da tiefster Punkt == 0 == schwarz und höchster Punkt == weiß == 256)
Die Unity Heightmap arbeitet mit 16 Bit. Das ist ein Exr File. Das sind dann 65535 Graustufen.
Werbeanzeige