Npc Drehen

  • Grundsätzlich geht das, aber irgendwie doch nicht :dizzy: Generell wäre sowas einfach umsetzbar: Über die Npc.setRotation() oder Npc.setViewDirection() Methoden kann die Rotation bzw. Blickrichtung des Npc geändert werden. Du könntest die aktuelle Blickrichtung des Npc holen um mit einer 90°-Rotation multiplizieren, dann erhälst du einen um 90° gedrehten Vektor (welchen du dann als neue ViewDirection setzen kannst).


    Rotationen werden über Quaternions dargestellt. Das ist an sich eine etwas kompliziertere Thematik, sofern man aber nicht gerade eine Mathe-Nerd ist, muss man da nicht allzu sehr hineintauchen. Die Rotation (also die X, Y, Z und W Komponente) ist nicht direkt lesbar, allerdings kann eine Rotation in (lesbare) eulersche Winkel umgewandelt werden. Hier werden Radiants verwendet, d.h. wenn du eine 90° Drehung möchtest, würdest du Pi/2 verwenden (in Utils.MathUtils gibt es u.a. eine statische "HALF_PI" Variable).


    Du würdest also eine Quaternion anhand eulerscher Winkel erstellen - das geschieht über Quaternion.fromAngles(). Wenn eine Quaternion mit einem Vektor multipliziert wird, wird der Vektor um genau diese Rotation gedreht.


    Das könnte so aussehen:

    Code
    //Neue 90° (Pi/2) Quaternion erstellen
    Quaternion rot = new Quaternion().fromAngles(0f, Utils.MathUtils.HALF_PI, 0f);
    //Blickrichtung des Npc holen und mit Quaternion multiplizieren
    Vector3f viewDir = rot.multLocal(npc.getViewDirection());
    //Neue Blickrichtung setzen
    npc.setViewDirection(viewDir);


    Aber (großes Aber): Durch das aktuelle Verhalten von Npcs wird die Drehung relativ schnell wieder überschrieben... d.h. es kann passieren, dass sich der Npc gar nicht oder nur ein wenig dreht 8| Das können wir durchaus als Bug betrachten...

    Ich weiß leider nicht, ob wir das in der Java Version noch beheben können. In der neuen Version zumindest werden wir das aber auf jeden Fall berücksichtigen.

Participate now!

Don’t have an account yet? Create a new account now and be part of our community!