2017-02-07 2 views
1

J'essaie de faire pivoter la caméra autour d'un cube avec la fonction LookAt() et en utilisant l'accéléromètre dans un appareil Android. Ça marche bien. Mais je veux que la rotation s'arrête à une certaine valeur dans l'axe Y. Voici mon code à ce jour:Unity caméra tournante avec accéléromètre

public Transform target; // The object to follow 
public float topMargin = 0.2f; // Top rotation margin 

// The position of the target 
private Vector3 point; 

void Start() { 
    point = target.transform.position; 
    transform.LookAt (point); 
} 

void Update() { 
    // Freeze 
    if (transform.rotation.y >= topMargin) { 
     transform.RotateAround (point, new Vector3 (0, 1, 0), 0); 
    } 
    // Freeze 
    else if (transform.rotation.y <= -topMargin) { 
     transform.RotateAround (point, new Vector3 (0, 1, 0), 0); 
    } else { 
     transform.RotateAround (point, new Vector3(0, 1, 0), Input.acceleration.x); 
    } 
} 

Le problème est que lorsque l'appareil atteint la marge supérieure, je ne peux pas commencer à tourner à nouveau dans le sens opposé. J'ai essayé avec une variable d'indicateur mais ne peux pas obtenir la logique de programme correcte (essayé différent if/else). Toute suggestion sur la façon de réaliser cela?

Répondre

0

Vous pouvez vérifier le sens de rotation (prévu). Si le résultat conduit à une rotation plus appropriée (à l'écart de la limite et vers la zone autorisée), vous pouvez "autoriser" la rotation prévue à appliquer. Je suppose que l'utilisation de la valeur de l'accéléromètre pour vérifier la «direction prévue» serait la plus facile et la moins sujette aux erreurs. (Plutôt que de vérifier la rotation elle-même)