0 Daumen
617 Aufrufe

Hallo,

ich habe da ein kleines Problem, welches ich nicht mit normalen Methoden lösen kann. Ich arbeite gerade an einem Unity Projekt mit dem ich ein Festival/Konzert Simulieren will. dabei will ich die neue DOTS Technologie von Unity verwenden, mit der es mir möglich ist viele hundert tausende kapseln zu generieren und sich bewegen zu lassen etc.


Mein Gelände war in den letzten Wochen dabei immer rechteckig. ich hatte also 2 Punkte P1 und P2 unten für die x Achse mit denen ich dann zufällig einen x Wert generiert habe: Random.Range(P1.x, P2.x) und einen Punkt im hinteren Bereich des Geländes P3 mit dem ich einen zufälligen Wert für die Z Achse berechnen kann: Random.Range(P2.z, P3.z).


Ich wollte jetzt eine Funktion einbauen, mit dem der Nutzer das Konzertgelände vergrößern kann, also wenn er 1 drückt, dann rotieren die beiden Seitlichen Absperrungen um 60°, sodass die Konzertfläche größer wird. Später will ich auch weiter in die weite gehen, also noch ein paar Seitliche Absperrungen hinten dran hängen.
Hier mal ein Bild, wie die rotierte Seitenwand aussieht:

Bild 2.PNG

Diese schwarze Linie stellt einen Zaun dar. Die weißen Punkte bilden Punkte ab, welche ich momentan im Programmcode verwende.


Bild 1.jpg

Die gelben stellen zeigen, wo genau ich im Moment meine Punkte verteilt habe. Es werden x Koordinaten im Bereich unten zwischen den beiden unteren gelben Punkten und z Koordinaten zwischen einem gelben Punkt unten und einem gelben Punkt hinten generiert.


Mein Problem ist jetzt, dass ich halt keine agents im außenbereich haben will, ich habe diesen auch rot markiert. Ein weiteres Problem ist, dass ich keinen großen Zugriff auf verschiedenen Bibliotheken habe mit denen man vielleicht sowas automatisieren könnte. Ich habe nur die Möglichkeit das ganze mit Abfragen zu umgehen. Also

if(randomPosition ist außerhalb von Trapez) => generiere für diesen agent eine neue randomPosition.

Ich habe nur Zugriff auf die verschiedenen gelben Punkte und die generierte Position in Vector3 Form.

Ich komme bei diesem Problem im Moment einfach nicht weiter, vielleicht hat ja jemand eine Idee wie ich das hin bekommen könnte.

Avatar von

Konnte das Problem mit einem Algorithmus lösen, welcher checkt, ob ein Punkt in einem Dreieck ist oder nicht. Ich generiere also einen Punkt wie in den oberen Bildern. Wenn der Punkt nun in einem der beiden Dreiecke ist, dann generiere ich eine neue zufällige Position und checke erneut.
Wenn die zufällige Position nicht in einem der beiden Dreiecke ist, dann behalte ich die Position und setze einen agent an dieser Stelle.Bild 3.PNG

Ein anderes Problem?

Stell deine Frage

Ähnliche Fragen

0 Daumen
1 Antwort
0 Daumen
1 Antwort
0 Daumen
1 Antwort
Gefragt 19 Mär 2018 von Gast

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community