44691


Input.mousePositionによるx,
yの情報を用いて、あるオブジェクトとの距離を一定に保ちつつ、オブジェクトの方向を常に見ながら移動するカメラを実現しようとしています。

移動、向きについて以下のことを試したのですが自然な動きを実現できなかったため、より良い方法を探しています。

・移動：極座標の考え方で入力xをy軸周りの角度θ、yをx軸周りのφに対応させて移動させることを試したのですが、z軸周りの回転ができないため不自然な動きになってしまいます。  
・カメラの向き：LookAtによってオブジェクトの方向を指定するだけでは、カメラのyベクトルとworldのyベクトルが直交する位置（オブジェクトの真上、真下）までカメラが移動した際にカメラの上下が反転してしまいます。


CC BY-SA 4.0
2018-06-06T12:41:00.827
44566
2019-01-16T08:49:28.887
2019-01-16T08:49:28.887
28804
28804
question
unity3d
unityでカメラをオブジェクト周りで球面的に移動させる


transform.RotateAroundを使うとうまくいきました。

[code]

    public class CameraRotator : MonoBehaviour {
    
    public Transform Earth;　///回転対象
    public float Speed = 0.5f;///回転速度
    private Vector2 pivot;
    
    void Update () {
        if (Input.GetMouseButtonDown(0))
        {
            pivot = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
        }
    
        if (Input.GetMouseButton(0))
        {
            float deltaX = Input.mousePosition.x - pivot.x;
            float deltaY = Input.mousePosition.y - pivot.y;
            pivot = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
            Camera.main.transform.RotateAround(Earth.position, (Camera.main.transform.up * deltaX + Camera.main.transform.right * (-deltaY)).normalized, Speed * Mathf.Sqrt(deltaX * deltaX + deltaY * deltaY));
        }
    }
    
[/code]

}


CC BY-SA 4.0
2018-06-11T10:45:40.267
44691
2018-06-11T10:45:40.267
28804
44566
answer