概要
Unity実行時のマウスによるカメラ操作例を記載します。
実装
オブジェクト構造
スクリプト
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に視点とするカメラの親オブジェクトを設定すればそのまま使えます。
対象を中心にカメラどうやって回せばいいの?と思って良く分からない計算しようと思ったりしたこともありましたが、カメラをオブジェクトの子にしてオブジェクトを回せば良いのでは?という方法になります。
利用シーンは多そうな気がするんですが基本的過ぎる?せいか、あまりド直球な例は見かけないため、自分用としてのメモもかねて記事にしました。