2017-09-22 6 views
0

나는 카메라가 위에서 아래를 향하고있는 3D 자동차 게임을 가지고있다. 차가 움직이면 카메라가 따라 와야합니다. 나는 뒤에 오는 위치를하는 방법을 알고있다. 그러나 나는 차를 위해 매끄럽게 같은 회전을 만드는 방법을 모르고있다. y 축만 변경하면됩니다. x = 90z = 0입니다. 자동차는 y 축에서만 또한 회전합니다.Unity에서 카메라를 부드럽게 회전하는 방법은 무엇입니까?

public float interpVelocity; 
public float minDistance; 
public float followDistance; 
public GameObject target; 
public Vector3 offset; 
Vector3 targetPos; 

// Use this for initialization 
void Start() 
{ 
    targetPos = transform.position; 
} 

// Update is called once per frame 
void FixedUpdate() 
{ 
    if (target) 
    { 
     Vector3 posNoZ = transform.position; 
     posNoZ.z = target.transform.position.z; 

     Vector3 targetDirectionZ = (target.transform.position - posNoZ); 

     interpVelocity = targetDirectionZ.magnitude * 5f; 

     targetPos = transform.position + (targetDirectionZ.normalized * interpVelocity * Time.deltaTime); 

     transform.position = Vector3.Lerp(transform.position, targetPos + offset, 0.25f); 


     Vector3 posNoX = transform.position; 
     posNoX.x = target.transform.position.x; 

     Vector3 targetDirectionX = (target.transform.position - posNoX); 

     interpVelocity = targetDirectionX.magnitude * 5f; 

     targetPos = transform.position + (targetDirectionX.normalized * interpVelocity * Time.deltaTime); 

     transform.position = Vector3.Lerp(transform.position, targetPos + offset, 0.25f); 
    } 
} 
+0

이 질문은 https://gamedev.stackexchange.com/ – Sty

+0

에 더 적합 할 오히려 SLERP 사용을 고려할 수 : 같은 모든 시간 X 축 및 z을 유지하려면, 당신의 각도 계산은 모양을 Lerp보다 – gareththegeek

답변

0

아마도 Mathf.Lerp이 도움이 될 수 있습니다. Lerp for Angles는 Vector의 lerp와 동일하게 작동하지만 약 360도를 래핑 할 때 올바른 값을 기억합니다.

var currentAngle = new Vector3(90.0f, 
     Mathf.LerpAngle(currentAngle.y, targetAngle.y, Time.deltaTime), 0.0f); 
+0

미안하지만 나는 이해하지 못한다. 그 전체 부분을 쓸 수 있습니까? 끝까지 추가했지만 여전히 작동하지 않습니다. transform.Rotate (새 Vector3 (90.0f, Mathf.LerpAngle (transform.rotation.y, target.transform.rotation.y, Time.deltaTime), 0.0f)); –