Jump to content
Unity Insider Forum

A* Pathfinder, CharacterController, Rigidbody Problem


3ncrypt0

Recommended Posts

Huhu zusammen,

nach einer etwas längeren Pause sitze ich wieder an einem neuen Projekt und stoße direkt am Anfang auf ein kleines Problem.

Der Spieler wird mittels Mausklick zur Mausposition beweget. Dazu habe ich mir das A* Pathfinder Projekt zur Hilfe genommen, da der Spieler durch verschiedene Räume navigiert werden muss. Die Sicht ist hier die Vogelperspektive.

Auf der Map befinden sich z.B. "Kartons" als Physicobjects. Läuft der Spieler z.B. dagegen oder dadurch, sollen diese sich natürlich bewegen oder ein Stapel umfallen. Im ersten Versuch hatte ich den Spieler als normalen CharacterController Player aufgebaut, allerdings gab es keine Reaktion an den Kartons, wenn ich durch diese durchlaufen wollte. Der Player hängte sich fest, die Kartons rührten sich kein Stückchen.

Dann habe ich dem Player die Rigidbody Component hinzugefügt, die Rotation fixiert. Die Kartons bewegten sich zwar ein Stückchen, aber das war alles eher Buggy. Der Player hing auch da häufig fest. Ich denke mal, dass es daran liegt, da ich den Player weiterhin mit dem CharacterController gesteuert habe.

Wenn ich den Player nun aber nicht mehr mit dem CharakterController steuere, sondern über die Physics, dann habe ich zwar den gewünschten Effekt bei den anderen physikalischen Objekten, so dass diese umfallen oder weggeschossen werden usw., allerdings legt sich mein Player immer hin, wenn ich eine TargetPosition erreicht habe, da der Player sich ja auch immer in Richtung des nächsten Waypoints drehen soll. Auch steht der Player immer schief. 

Gibt es eine Möglichkeit den Player mit dem CharacterController zu steuern, so dass auch andere Objekte, welche die RigidbodyComponent besitzen, darauf reagieren?

Da ich gerade nur am MacBook sitze und noch nicht im Büro, kann ich gerade keine CodeSnippets posten, hole ich aber gleich nach.

 

VG Jochen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn du aus der Vogelperspektive guckst, und der RigidBody z.B. eine Kapsel als Kollider hat, dann sperre doch einfach die Z und X Achsen. Dann kann sich der RB nur noch über die Y Achse drehen und somit nicht kippen. Wenn du alle Achsen frei haben willst, solltest du deine Ziele nicht auf höhe des Bodens haben, sondern eben in der gleichen Höhe wie der Achsenmittelpunkt deines Players ist. Dann sollte er auch nicht mehr kippen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gerade eben schrieb malzbie:

Wenn du aus der Vogelperspektive guckst, und der RigidBody z.B. eine Kapsel als Kollider hat, dann sperre doch einfach die Z und X Achsen. Dann kann sich der RB nur noch über die Y Achse drehen und somit nicht kippen. Wenn du alle Achsen frei haben willst, solltest du deine Ziele nicht auf höhe des Bodens haben, sondern eben in der gleichen Höhe wie der Achsenmittelpunkt deines Players ist. Dann sollte er auch nicht mehr kippen.

Ich habe die Z und X Achse ja gesperrt, dass interessiert den aber nicht. Was aber normal sein sollte, wenn ich den Player über die CharacterController Component steuer, da ich ja das transform bewege, oder nicht? 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

konnte das Problem lösen.

Mein Player ist nun ein Rigidbody. Ich musste in dem Fall Drag und AngularDrag auf 1 setzen und weiterhin die Rotation am Rigidbody auf X und Z sperren.

Hier ein Auszug aus meiner PlayerController:

if (reachedEndOfPath)
            return;
lookAttarget = new Vector3(path.vectorPath[currentWaypoint].x - transform.position.x, transform.position.y, path.vectorPath[currentWaypoint].z - transform.position.z);
playerRot = Quaternion.LookRotation(lookAttarget);

transform.rotation = Quaternion.Slerp(transform.rotation, playerRot, rootSpeed * Time.deltaTime);
transform.position = Vector3.MoveTowards(transform.position, new Vector3(path.vectorPath[currentWaypoint].x, 1, path.vectorPath[currentWaypoint].z), speed * Time.deltaTime);

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...