2017-04-03 10 views
0

ここの以前の記事は私の問題には対処していないようです。ユニティのオブジェクトの周りを動くカメラ

私は自分のカメラに「ターゲット」という特定のポイントを移動させようとしています。ターゲットは、ゲームの中心に設定された空のゲームオブジェクトです。アイデアは、カメラがターゲットに近づいたり遠ざかったりすることなく、目に見えない球のまわりを動いているかのように、ターゲットのまわりを単に回転するということです。カメラは常に目標を指すべきです。 transform.LookAt(target)は、ターゲット上で訓練されたカメラをうまく保つだけですが、正しい動きを得ることはできません。私が水平軸または垂直軸に沿って動いているかどうかは、それを周回するのではなく、ターゲットに常に螺旋を描きます。何か案は?

public class CameraController : MonoBehaviour { 

public float speed; 
public Transform target; 

void Update() { 
    transform.LookAt(target); 

    if(Input.GetAxis("Vertical") != 0) 
    { 
     transform.Translate(transform.up * Input.GetAxis("Vertical") * Time.deltaTime * speed); //.up = positive y 
    } 

    if(Input.GetAxis("Horizontal") != 0) 
    { 
     transform.Translate(transform.right * Input.GetAxis("Horizontal") * Time.deltaTime * speed); //.right = positive x 
    } 
} 
} 

答えて

1

私はTransform.RotateAroundを使用し、特定のポイントを中心に回転させるには:

transform.RotateAround(target.position, transform.right, -Input.GetAxis("Mouse Y") * speed); 
transform.RotateAround(target.position, transofrm.up, -Input.GetAxis("Mouse X") * speed); 

場合や、ターゲットが移動して、あなたが私の答えからthis piece of codeを使用することができ、カメラとターゲットの間で同じ距離を維持したいです.unity3d.comページ:

public class SphericalCam 
    : MonoBehaviour 
{ 
    public float MinDist, CurrentDist, MaxDist, TranslateSpeed, AngleH, AngleV; 
    public Transform Target; 

    public void Update() 
    { 
     AngleH += Input.GetAxis("Mouse X"); 
     AngleV -= Input.GetAxis("Mouse Y"); 
     CurrentDist += Input.GetAxis("Mouse ScrollWheel"); 
    } 

    public void LateUpdate() 
    { 
     Vector3 tmp; 
     tmp.x = (Mathf.Cos(AngleH * (Mathf.PI/180)) * Mathf.Sin(AngleV * (Mathf.PI/180)) * CurrentDist + Target.position.x; 
     tmp.z = (Mathf.Sin(AngleH * (Mathf.PI/180)) * Mathf.Sin(AngleV * (Mathf.PI/180)) * CurrentDist + Target.position.z; 
     tmp.y = Mathf.Sin(AngleV * (Mathf.PI/180)) * CurrentDist + Target.position.y; 
     transform.position = Vector3.Slerp(transform.position, tmp, TranslateSpeed * Time.deltaTime); 
     transform.LookAt(Target); 
    } 
} 
+0

これはまだまだ機能しません。 1つは、X軸(磁極で停止して振動する)で回転するときには、まったく動かないだろう。また、y軸の周りを回転するとき、ターゲットの上か下であっても、そのY移動がターゲットの移動と一致するまで軌道に降下します。 –

+0

@DylanRussell私はこれらの2つの機能を自分のプロジェクトで使用していますが、うまくいくようです。これらが原因だと確信していますか? –

+0

X軸を中心に回転する特定の点に達すると、ローカルの正の軸と負の軸が切り替わるということが、実際に極に問題があることがわかりました。上向きまたは下向きのキーを押したままにすると、ターゲットをスムーズに回転させることがわかっている、これに対処する方法はありますか? –

関連する問題