2017-09-22 1 views
0

J'ai un jeu de voiture 3D où la caméra pointe du haut vers le bas. Lorsque la voiture se déplace, j'ai besoin que la caméra le suive. Je sais comment faire la position suivante, mais je ne sais pas comment faire la même rotation que pour la voiture en douceur. Je n'ai besoin que de changer l'axe y. x = 90 et z = 0 tout le temps. La voiture tourne également seulement sur l'axe y.Comment faire pivoter la caméra en douceur dans 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

cette question pourrait être plus approprié sur https://gamedev.stackexchange.com/ – Sty

+0

Pensez à utiliser Slerp plutôt que Lerp – gareththegeek

Répondre

0

Peut-être que Mathf.Lerp peut être utile dans votre cas. Lerp pour angles fonctionne de la même manière que lerp de Vector, mais garde également à l'esprit des valeurs correctes, lors de l'enrobage de 360 ​​degrés. Si vous voulez garder x et z axe le même tout le temps, le calcul de votre angle ressemblera:

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

Je suis désolé mais je ne comprends pas. Pouvez-vous écrire cette partie entière? J'ai ajouté ceci à la fin mais cela ne fonctionne toujours pas. transform.Rotate (nouveau Vector3 (90.0f, Mathf.LerpAngle (transform.rotation.y, target.transform.rotation.y, Time.deltaTime), 0.0f)); –