2011-12-11 16 views
11

nel mio gioco Ho una macchina fotografica e voglio avere un FPS come la rotazione allegato a questa fotocamera.Unità fps fotocamera rotazione

Quindi, se sposto il mio cursore a sinistra, voglio la mia cam per ruotare a sinistra. Se muovo il cursore verso l'alto, quindi la camma dovrebbe guardare in alto, ecc

Al momento ho parzialmente funzionante. Posso guardare a destra ea sinistra, su e giù. Il problema si verifica quando guardo in basso e poi muovo il cursore a sinistra ea destra. Quindi mi dà un effetto "Roll".

vedere questo video per vedere esattamente quello che voglio dire: http://www.screencast.com/t/Phedh8H0K13

Ovviamente quando guardo giù ho ancora voglia di avere un effetto "Yaw" invece di un effetto "Roll". Qualche idea su come farlo? Questo è quello che ho finora:

// Update is called once per frame 
public override void update() 
{ 
    this.camera.transform.rotation *= 
     Quaternion.AngleAxis(Time.deltaTime * sensitivityRoll * Input.GetAxis("Vertical"), Vector3.forward); 

    this.camera.transform.rotation *= 
     Quaternion.AngleAxis(Time.deltaTime * sensitivityYaw * Input.GetAxis("Mouse X"), Vector3.up); 

    this.camera.transform.rotation *= 
     Quaternion.AngleAxis(Time.deltaTime * sensitivityPitch * Input.GetAxis("Mouse Y"), Vector3.left); 
} 

risposta

10

ho appena trovato la mia risposta in questa discussione:

http://forum.unity3d.com/threads/109250-Looking-with-the-Mouse?highlight=person+camera


Il codice da questo argomento:

codice

C# Mono:

using UnityEngine; 
using System.Collections; 

/// MouseLook rotates the transform based on the mouse delta. 
/// Minimum and Maximum values can be used to constrain the possible rotation 

/// To make an FPS style character: 
/// - Create a capsule. 
/// - Add the MouseLook script to the capsule. 
/// -> Set the mouse look to use LookX. (You want to only turn character but not tilt it) 
/// - Add FPSInputController script to the capsule 
/// -> A CharacterMotor and a CharacterController component will be automatically added. 

/// - Create a camera. Make the camera a child of the capsule. Reset it's transform. 
/// - Add a MouseLook script to the camera. 
/// -> Set the mouse look to use LookY. (You want the camera to tilt up and down like a head. The character already turns.) 
[AddComponentMenu("Camera-Control/Mouse Look")] 
public class MouseLook : MonoBehaviour { 

    public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 } 
    public RotationAxes axes = RotationAxes.MouseXAndY; 
    public float sensitivityX = 15F; 
    public float sensitivityY = 15F; 

    public float minimumX = -360F; 
    public float maximumX = 360F; 

    public float minimumY = -60F; 
    public float maximumY = 60F; 

    float rotationY = 0F; 

    void Update() 
    { 
     if (axes == RotationAxes.MouseXAndY) 
     { 
      float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX; 

      rotationY += Input.GetAxis("Mouse Y") * sensitivityY; 
      rotationY = Mathf.Clamp (rotationY, minimumY, maximumY); 

      transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0); 
     } 
     else if (axes == RotationAxes.MouseX) 
     { 
      transform.Rotate(0, Input.GetAxis("Mouse X") * sensitivityX, 0); 
     } 
     else 
     { 
      rotationY += Input.GetAxis("Mouse Y") * sensitivityY; 
      rotationY = Mathf.Clamp (rotationY, minimumY, maximumY); 

      transform.localEulerAngles = new Vector3(-rotationY, transform.localEulerAngles.y, 0); 
     } 
    } 

    void Start() 
    { 
    //if(!networkView.isMine) 
     //enabled = false; 

     // Make the rigid body not change rotation 
     //if (rigidbody) 
      //rigidbody.freezeRotation = true; 
    } 
} 
+0

Anni di ritardo ma grazie per la risposta, è esattamente quello che stavo cercando! – user1354784

Problemi correlati