今回は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;
}
}
}
実行すると下記の様な感じにカメラ(ゲーム画面)を動かすことが出来ます。
