Sakura Hanami Geschrieben 21. Januar 2018 Melden Share Geschrieben 21. Januar 2018 Hallo, ich bin Anfänger und habe eine einfaches Szenario erstellt. Dazu habe ich einen FPSController und ein Model (von Mixamo). Das Model tanzt. Wenn ich darauf zugehe soll es stehen bleiben, nach Idle State wechseln und zu FPSController schauen. Dazu habe ich mir eine distance von 7 Units gewählt. Es funktioniert auch. Allerdings neigt sich das Model nach hinten. Wenn ich mich weiter zurückbewege richtet sie sich wieder auf. Target ist der FPSController. using System.Collections; using System.Collections.Generic; using UnityEngine; public class ArrisaSpeechWithMe : MonoBehaviour { public float distance; // Öffentlich zum beobachten public float speechRange; private Animator anim; public Transform target; // Use this for initialization void Start() { anim = GetComponent<Animator>(); speechRange = 7; } // Update is called once per frame void Update() { distance = Vector3.Distance(target.position, transform.position); if (distance < speechRange) { anim.SetBool("isIdle", true); LookAt(); } } void LookAt() { // Hier muss ein Fehler auftreten Quaternion rotation = Quaternion.LookRotation(target.position - transform.position); transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime); } } Hat jemand eine Idee und kann mir einen Tip geben ArrisaSpeechWithMe.cs Insel.exe Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 21. Januar 2018 Melden Share Geschrieben 21. Januar 2018 Das ganze Model mit LookRotation zu drehen ist keine gute Idee, zudem dein Charakter animiert ist. Ein Weg wäre ein IK (Inverse Kinematic) auf den Charakter zu legen und dann entweder nur den Kopf (oder Kopf + Body) auf ein Ziel auszurichten. Dieses Ziel kann die Kamera des FPS-Controllers sein. Hier ein Beispiel wie das dann aussieht, ca. ab Mitte des Videos. Der Charakter schaut in Richrung Kamera, wenn sich die Kamera vor den Charakter befindet.https://streamable.com/68h6h Ansonsten eine einfache Lösung wäre, wenn du den Charakter nur in Y drehst. LookRotation dreht über alle Achsen und dies ist eher ungünstig. Hier eine schnelle Lösung, musst du mal Testen, ob dir das reicht: void LookAt() { Vector3 viewPoint = new Vector3(target.position.x,transform.position.y,target.position.z) - transform.position; Quaternion rotation = Quaternion.LookRotation(viewPoint); transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime); } Natürlich kann man auch beides Mischen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sakura Hanami Geschrieben 21. Januar 2018 Autor Melden Share Geschrieben 21. Januar 2018 Hallo lieber ZeroOCool, ich habe es gleich mal probiert und es funktioniert. Vielen Dank!!! Ist hier das ...transform.position.y... das Entscheidende? Bekomme ich als Ergebnis einen Vector, der in Richtung FPSController zeigt? Aber super gelöst vielen Dank! lg Thomas Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 21. Januar 2018 Melden Share Geschrieben 21. Januar 2018 Ja, dadurch wird nur in der XZ-Ebene rotiert und es ist egal in welcher Höhe sich das Ziel befindet (Y). Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.