今回はUnity2Dでマウス操作でカメラ(ゲーム画面)を動かしてみます。
はじめに
Unityのバージョンは2022.3.10f1です。
キーボードやマウスの操作でカメラを動かしたり、ズームしてみます。
実装開始
まずは簡単な画面を用意。これは何でも良いです。
画面をズーム(カメラズーム)
カメラオブジェクトのSizeを変更するとカメラサイズが変更されズームイン・ズームアウトします。このSizeをスクリプトで変更します。
スクリプトを作成
下記スクリプトを作成して、カメラオブジェクトにアタッチします。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CameraMove : MonoBehaviour { private float zoom; private float minZoom = 3f; private float maxZoom = 6f; private Camera cam; void Start() { cam = GetComponent<Camera>(); zoom = cam.orthographicSize; } void Update() { float val = Input.GetAxis("Vertical"); zoom -= val; zoom = Mathf.Clamp(zoom, minZoom, maxZoom); cam.orthographicSize = zoom; } }
キーボードの上下キーでカメラがズームイン・ズームアウトします。下記の様にするとゆったりズームするような動きになります。
// cam.orthographicSize = zoom; cam.orthographicSize = Mathf.Lerp(cam.orthographicSize, zoom, 0.05f);
マウスのホイール操作でズームする場合は下記に変更。
// float val = Input.GetAxis("Vertical"); float val = Input.GetAxis("Mouse ScrollWheel");
ホイールで動く量は「ProjectSettings」→「InputManager」のSensitivityで調整できます。
マウスドラッグでカメラ位置移動
次にマウスドラッグでカメラの位置を動かすのを実装します。
スクリプトを下記に変更。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CameraMove : MonoBehaviour { private float zoom; private float minZoom = 3f; private float maxZoom = 6f; private float zoomSpeed = 0.05f; private Vector3 source; private Vector3 diff; private Camera cam; void Start() { cam = GetComponent<Camera>(); zoom = cam.orthographicSize; } void LateUpdate() { CameraZoom(); CameraDrag(); } private void CameraZoom() { float val = Input.GetAxis("Mouse ScrollWheel"); zoom -= val; zoom = Mathf.Clamp(zoom, minZoom, maxZoom); cam.orthographicSize = Mathf.Lerp(cam.orthographicSize, zoom, zoomSpeed); } private void CameraDrag() { if (Input.GetMouseButtonDown(0)) { source = cam.ScreenToWorldPoint(Input.mousePosition); } if (Input.GetMouseButton(0)) { diff = cam.ScreenToWorldPoint(Input.mousePosition) - cam.transform.position; cam.transform.position = source - diff; } } }
実行すると下記の様な感じにカメラ(ゲーム画面)を動かすことが出来ます。