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!
ich habe momentan ein Problem in Unity mit der Generierung eines Nav Meshs und weiß nicht mehr weiter. Ist es in irgend einer Weise möglich ein Nav Mesh zu generieren für rotierte Objekte wie zum Beispiel einer Plane die um 90° in der X Achse gedreht ist oder direkt für einen ganzen Würfel? Ziel ist eine Art "Würfel-Planet" mit Off Mesh Links über den Kanten des Würfels.
Es gibt so gut wie keine pathfinding plugins die für sowas ausgelegt sind...
Von daher würd ichs am ehesten umgehen indem ich die 3D oberfläche auf eine Ebene projiziert iere dort dann die navigationsberechnung durchführe und dann das ergebnis rücktransformiere. Nur als workaround idee...
Der Ansatz klingt sehr interessant. Kannst du das nochmal ausführlicher erklären? Gerade bezüglich "rücktransformieren" habe ich keine Idee wie ich das anstellen soll.
[System.Serializable]
publicclass WorldPathPair {
public Transform worldPlane =null;
public Transform pathPlane =null;
}
publicclass WorldPathPairs : MonoBehaviour {
public List<WorldPathPair> worldPathPairs =new List<WorldPathPair>();
public Transform GetWorldPlane(Transform pathPlane) {
foreach (WorldPathPair wpr in worldPathPairs) {
if (wpr.pathPlane == pathPlane) {
return wpr.worldPlane;
}
}
Debug.LogError("Can't find WorldPlane of Pathplane: "+ pathPlane);
returnnull;
}
}
Wenn ich nun ein Ray auf eine World Plane schieße erhalte ich die dazugehörige Path Plane. Wie vollziehe ich nun aber die Umwandlung von dem getroffenen Punkt auf der World Plane zur Path Plane? Könnten mir Matrizen hier helfen?
So ich bin nun einen Schritt weiter. Mittels einer MappingPlane und einem MappingPoint als Child kann ich via Methode abfragen welcher Punkt einer WorldPlane den Punkt auf einer PathPlane entspricht.
public Vector3 TransformWorldToPath(Transform worldPlane, Vector3 worldPoint) {
//set MappingPlane to the Pos/Rot/Scale of worldPlane
mappingPlane.position = worldPlane.position;
mappingPlane.rotation = worldPlane.rotation;
mappingPlane.localScale = worldPlane.localScale;
//set MappingPoint of MappingPlane
mappingPoint.position = worldPoint;
//get the PathPlane of the worldPlane
Transform pathPlane = GetPathPlane(worldPlane);
//set MappingPlane to the Pos/Rot/Scale of pathPlane
mappingPlane.position = pathPlane.position;
mappingPlane.rotation = pathPlane.rotation;
mappingPlane.localScale = pathPlane.localScale;
//return position of pointreturn mappingPoint.position;
}
public Vector3 TransformPathToWorld(Transform pathPlane, Vector3 pathPoint) { /* */ }
Als weiteren Schritt werde ich jetzt einen NavMeshAgent erzeugen der auf den PathPlanes wandert und seine Position für einen Charakter auf die Welt projiziert. Dabei stellt sich mir nun aber folgende Frage:
Wie löse ich das Problem mit den OffMeshLinks zwischen den Seiten der Welt? Die PathPlanes stehen ja räumlich völlig anders als die WorldPlanes (Es existiert z.B. ein Übergang zwischen der gelben und grünen Fläche). Kann ich in meinem Fall die OffMeshLinks überhaupt nutzen?
Liebe Grüße,
René
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von »Renegade« (30.05.2014, 02:08)