LoginSignup
0
0

More than 1 year has passed since last update.

Unity実行時のマウスによるカメラ操作例

Posted at

概要

Unity実行時のマウスによるカメラ操作例を記載します。

実装

オブジェクト構造

image.png
image.png

スクリプト

using UnityEngine;

public class CtrlView : MonoBehaviour
{
    [SerializeField] Transform TargetCam;
    [SerializeField] Transform ViewPoint;

    [SerializeField] float Angle_Speed = 0.5f;
    [SerializeField] float PosXY_Speed = 0.005f;
    [SerializeField] float PosZ_Speed = 5;

    Vector3 MousePos;

    void Update()
    {
        // マウスの移動量を取得
        var diff = MousePos - Input.mousePosition;
        MousePos = Input.mousePosition;

        if (Input.GetMouseButton(0))
        {
            // 左クリック(回転)
            var tmp = diff;
            diff.x = +tmp.y;
            diff.y = -tmp.x;
            ViewPoint.eulerAngles += diff * Angle_Speed;
        }
        else if (Input.GetMouseButton(1))
        {
            // 右クリック(移動)
            var tmp = diff;
            diff.x = -tmp.x;
            diff.y = +tmp.y;
            ViewPoint.position += diff * PosXY_Speed;
        }

        // スクロール(拡縮というか前後)
        var scroll = Input.GetAxis("Mouse ScrollWheel");
        var pos = TargetCam.localPosition;
        pos.z += scroll * PosZ_Speed;
        TargetCam.localPosition = pos;
    }
}

補足

スクリプトは同クラス名でファイルを作成してそのままコピペしたら、どこかテキトウなオブジェクトにアタッチして、TargetCamに操作したいカメラ、ViewPointに視点とするカメラの親オブジェクトを設定すればそのまま使えます。
対象を中心にカメラどうやって回せばいいの?と思って良く分からない計算しようと思ったりしたこともありましたが、カメラをオブジェクトの子にしてオブジェクトを回せば良いのでは?という方法になります。
利用シーンは多そうな気がするんですが基本的過ぎる?せいか、あまりド直球な例は見かけないため、自分用としてのメモもかねて記事にしました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0