2016-09-16 6 views
1

Unity3Dにはメインカメラがあります。これは、マウスの入力に応じて回転したいので、どこに見たいかによってマウスを動かす最初の人のビデオゲームとして機能します。カメラのUnity3DでカメラがZ軸を中心に回転しているのはなぜですか?

開始値は、(ユニティでInspectorタブにタブを変換):

  1. 位置:X = -1、Y = 1、Z = -11。
  2. 回転:X = 0、Y = 0、Z = 0
  3. スケール:X = 1、Y = 1、Z = 1

私用のスクリプトコンポーネントを追加メインカメラ。そして、それは次のクラスです:

using UnityEngine; 
using System.Collections; 

public class CameraMove : MonoBehaviour { 

    float deltaRotation = 50f; 

    // Use this for initialization 
    void Start() { 

    } 

    // Update is called once per frame 
    void Update() { 

      if(Input.GetAxis("Mouse X") < 0){ 
      //Code for action on mouse moving left 
       transform.Rotate (new Vector3 (0f, -deltaRotation, 0f) * Time.deltaTime); 
      } 
      else if(Input.GetAxis("Mouse X") > 0){ 
      //Code for action on mouse moving right 
       transform.Rotate (new Vector3 (0f, deltaRotation, 0f) * Time.deltaTime); 
      } 

      if(Input.GetAxis("Mouse Y") < 0){ 
      //Code for action on mouse moving left 
       transform.Rotate (new Vector3 (deltaRotation, 0f, 0f) * Time.deltaTime); 
      } 
      else if(Input.GetAxis("Mouse Y") > 0){ 
      //Code for action on mouse moving right 
       transform.Rotate (new Vector3 (-deltaRotation, 0f, 0f) * Time.deltaTime); 
      } 
    } 
} 

しかし、私がシーンをプレイすると、カメラは回転しません。 ローテーションの値は、x軸、y軸、さらにはz軸で変化します。

私は間違っていますか?

答えて

1

これはQuaternionの計算方法に問題があります。これは、複数の軸が変更されている場合に発生します。すべてのx回転またはy回転をコメントし、一度に1つの軸だけ回転すると、この問題は解消されます。

カメラをマウス入力で正しく回転させるには、eulerAnglesまたはlocalEulerAnglesの変数を使用します。これら2つの間のオプションは、あなたがやっていることに依存します。

public float xMoveThreshold = 1000.0f; 
public float yMoveThreshold = 1000.0f; 

public float yMaxLimit = 45.0f; 
public float yMinLimit = -45.0f; 


float yRotCounter = 0.0f; 
float xRotCounter = 0.0f; 


// Update is called once per frame 
void Update() 
{ 
    xRotCounter += Input.GetAxis("Mouse X") * xMoveThreshold * Time.deltaTime; 
    yRotCounter += Input.GetAxis("Mouse Y") * yMoveThreshold * Time.deltaTime; 
    yRotCounter = Mathf.Clamp(yRotCounter, yMinLimit, yMaxLimit); 
    transform.localEulerAngles = new Vector3(-yRotCounter, xRotCounter, 0); 
} 
+0

どのようにマウスを動かすかによってカメラを動かしたいと思います。あなたがマウスでカメラを動かすことができる最初の人のビデオゲーム(CS、ポータルなど)を考えてみてください。では、 'localEulerAngles'と' eulerAngles'の違いは何ですか? –

+0

私はあなたがしていることを知っています。これが正しい解決策です。 'localEulerAngles'と' eulerAngles'の違いについては 'localEulerAngles'は位置軸で回転し、' eulerAngles'はワールド軸で回転します。ローカル軸は、スクリプトが回転しているGameObjectの軸です。あなたがまだそれを理解していない場合は、あなたはグーグルローカル対ユニティのグローバル軸することができます。 'localEulerAngles'はうまくいくはずです。 – Programmer

+0

完全性を気にしているなら、 'transform.localEulerAngles = new Vector3(-yRotCounter、xRotCounter、0);の前に' xRotCounter = xRotation%360;問題がある場合は教えてください。 – Programmer

関連する問題