2017-05-11 10 views
2

ここではスペースで回転しています。カメラを回すことはできますが、プレーヤーの回りを回ることはできません。カメラをプレーヤーの周りだけで回転させたい。マウスでカメラを回転させるにはどうすればいいですか?

using UnityEngine; 
using System.Collections; 

public class CameraMover : MonoBehaviour 
{ 
    public float speedH = 2.0f; 
    public float speedV = 2.0f; 
    private float yaw = 0.0f; 
    private float pitch = 0.0f; 

    public Transform playerTransform; 
    public Transform mainCameraTransform = null; 
    private Vector3 cameraOffset = Vector3.zero; 
    public float turnSpeed = 3; 

    void Start() 
    { 
     mainCameraTransform = Camera.main.transform; 

     //Get camera-player Transform Offset that will be used to move the camera 
     cameraOffset = mainCameraTransform.position - playerTransform.position; 
    } 

    void LateUpdate() 
    { 
     //Move the camera to the position of the playerTransform with the offset that was saved in the begining 
     mainCameraTransform.position = playerTransform.position + cameraOffset; 

     yaw += speedH * Input.GetAxis("Mouse X"); 
     pitch -= speedV * Input.GetAxis("Mouse Y"); 
     mainCameraTransform.eulerAngles = new Vector3(pitch, yaw, 0.0f); 
    } 
} 

私は今回転のためにオイラーアングルを使用しています。

+0

プレーヤーを中心とするオブジェクトを作成し、そのオブジェクトに子として追加します。次に、カメラをプレーヤーの周りで回転させることは、親オブジェクトのローカル回転を変更することと同じくらい簡単です。 – Abion47

+0

@ Abion47私は試しました:私のスクリプトと同じですが、行をmainCameraTransform.eulerAngles = new Vector3(pitch、yaw、0.0f)から変更しました。 To transform.parent.gameObject.transform.eulerAngles = new Vector3(ピッチ、ヨー、0.0f);しかし、それはカメラを回転させています。空のGameObject iは第三者のコントローラセンターに置かれていません。このスクリプトは、GameObjectの子であるメインカメラに添付されています。 –

+0

オブジェクト自体にアタッチします。このアプローチでは、オブジェクトはマウスが実際に制御するものですが、カメラは乗り物のためだけに移動します。 – Abion47

答えて

1

コメントに記載されているように、カメラの親オブジェクトを作成し、カメラの代わりにそのオブジェクトを回転させる必要があります。次のコードを試してください:

using UnityEngine; 
using System.Collections; 

public class CameraMover : MonoBehaviour 
{ 
    public float speedH = 2.0f; 
    public float speedV = 2.0f; 
    private float yaw = 0.0f; 
    private float pitch = 0.0f; 

    public Transform playerTransform; 
    public Transform mainCameraTransform = null; 
    private Vector3 cameraOffset = Vector3.zero; 
    public float turnSpeed = 3; 

    // Create a camera parent object 
    GameObject cameraParent; 

    void Start() 
    { 
     cameraParent = new GameObject(); 
     mainCameraTransform = Camera.main.transform; 

     //Get camera-player Transform Offset that will be used to move the camera 
     cameraOffset = mainCameraTransform.position - playerTransform.position; 

     // Position the camera parent to the player and add the camera as a child 
     cameraParent.transform.position = playerTransform.position; 
     mainCameraTransform.parent = cameraParent.transform; 
    } 

    void LateUpdate() 
    { 
     //Move the camera to the position of the playerTransform with the offset that was saved in the begining 
     //mainCameraTransform.position = playerTransform.position + cameraOffset; 

     yaw += speedH * Input.GetAxis("Mouse X"); 
     pitch -= speedV * Input.GetAxis("Mouse Y"); 

     // Rotate the camera parent instead of the camera 
     cameraParent.transform.eulerAngles = new Vector3(pitch, yaw, 0.0f); 
    } 
} 
+0

それを行う方法が見つかりました。プレーヤーの中心に立方体を追加することで。素晴らしい仕事。ズームインも追加しました。 –

+0

@ Abion47 CameraParentがStartメソッド内でインスタンス化され、カメラ位置を変更していたコード行も削除されるようにコードを編集しました。プロジェクトビューでオブジェクトを作成する必要があるという記述は理解できません。あなたはコード内にGameObjectsを作成するアイデアをよく知っていますか? – lockstock

関連する問題