2016-12-12 3 views
0

쿼터니언을 사용하여 회전을 쉽게 할 때 문제가 발생합니다. 회전이 시작 지점에서 끝 지점까지 360도 회전하기로 결정할 때까지 회전 속도가 한 지점에 도달 할 때까지는 문제가 해결되지 않습니다. 값이 x에서 -x로 바뀌기 때문에 가정한다고 가정합니다. 이 문제를 어떻게 해결할 수 있습니까?천천히 움직일 때 쿼터니온 360도 회전

여기에 내 코드

GameObject head; 
float speed; 

void Start() { 
    head = GameObject.Find("Camera (eye)"); 
    speed = 1f; 
} 

void Update() { 
    transform.rotation = new Quaternion(EaseOutBack(transform.rotation.x, head.transform.rotation.x, Time.deltaTime * speed), EaseOutBack(transform.rotation.y, head.transform.rotation.y, Time.deltaTime * speed), EaseOutBack(transform.rotation.z, head.transform.rotation.z, Time.deltaTime * speed), EaseOutBack(transform.rotation.w, head.transform.rotation.w, Time.deltaTime * speed)); 
} 

public static float EaseOutBack(float start, float end, float value) 
{ 
    float s = 1.70158f; 
    end -= start; 
    value = (value) - 1; 
    return end * ((value) * value * ((s + 1) * value + s) + 1) + start; 
} 

답변

2

나는 두 사원 수 사이 slerping 시도하고 Quaternion.Slerp의 t 매개 변수에 여유 함수를 적용 할 것입니다.

뭔가 같은 :

transform.rotation = Quaternion.Slerp(transform.rotation, head.transform.rotation, EaseOutBack(0, 1, Time.deltaTime * speed));