Unity|マウス操作でカメラをズームしたり動かす(ゲーム画面操作)

今回は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;
        }
    }
}

実行すると下記の様な感じにカメラ(ゲーム画面)を動かすことが出来ます。

タイトルとURLをコピーしました