2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Unity2D】マウスホイールでズームイン/ズームアウトする

Last updated at Posted at 2022-03-01

1.Unityのズームイン・ズームアウトについて

カメラワークで「ズーム」というのはよく使う手段だと思います。
その他のカメラワークも含めて、一度Unityで活用できるカメラワーク全般を学んでおくのは無駄ではありません。この辺について興味がある方は、詳しくは以下の記事をご覧ください

エクスプラボのtodoさんは「ズーム」というカメラワークについて、Cameraコンポーネントの「Field of View」の値を変更するか、物理カメラの焦点距離である「Focal Length」の値を変更するかの二つの実装方法を、書籍などでお話されています。個人的にはこの意見に賛成です。

2.マウスホイールでズーム

今回の話題である、マウスホイールでのズームカメラワークについて、関連するインターネットの記事を捜索すると、このような記事に出会いました。

こちらは、カメラやゲームオブジェクト自体を移動してズームを実装するという、初心者にはとてもわかりやすい方法が示されています。

以上、二つの記事を挙げましたが、上記の方法は2DのUnityで使用できないっぽいので、2D用のズームの実装スクリプトを作成することにしました。

3.【本題】マウスホイールでズーム【2D】

スクリプトでどこを変更するのかというと、この部分です↓↓
zajhajkgdjka.png

実際に数字を変更して、ズーム機能が実装できる余地があることを確認しましょう。

ただし、ここの数字を0にするとゲーム画面が真っ暗になってしまいます
これには理由があるのですが、詳しくは自分でググってみてください~。

ということで、スクリプトです。
こちらのスクリプトの方針として、件の項目に0が入ることをとにかく回避するしています。

CameraWork.cs
using UnityEngine;

public class CameraWork : MonoBehaviour
{
    private Camera mainCam; //カメラ
    void Start()
    {
        mainCam = Camera.main; //メインカメラを取得
    }
    
    void Update()
    {
        //ホイールを取得して、均しのためにtime.deltaTimeをかけておく
        var scroll = Input.mouseScrollDelta.y*Time.deltaTime*10;
        Debug.Log(scroll);
        
        //mainCam.orthographicSizeは0だとエラー出るっぽいので回避策
        if (mainCam.orthographicSize > 0)
        {
            mainCam.orthographicSize += scroll;
        }
        else
        {
            mainCam.orthographicSize -= scroll;
        }
    }
}

このスクリプトを適当なゲームオブジェクトにアタッチしていただければうまくいくかと…。

2
2
1

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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?