【Unity入門】カメラをズームイン・ズームアウトさせる方法|視点操作の基本をマスターしよう

自宅の机でパソコン作業に集中している日本人男性。明るくやわらかなアニメ調のイラスト。

Unityでゲームを作る時、プレイヤーの操作感を高めるために「カメラのズームイン・ズームアウト」する機能はとても重要です。
特に3Dや戦略ゲームでは、視点の拡大・縮小が快適なプレイ体験につながります。

この記事では、マウスホイール操作でカメラをズームイン・ズームアウトさせる基本的な方法を、初心者にもわかりやすく解説します。Cinemachineを使わない、Unity標準のカメラを対象としたシンプルな実装から始めましょう。

目次

ズーム操作でカメラの自由度を高めよう

木漏れ日の中、カメラを構えて笑顔を見せる若い日本人男性。自由に視点を切り替える感覚を表現したアニメ調イラスト。

前回は「カメラをキャラクターに追従させる」「自由視点カメラを作る」ことで、ゲーム内での視点操作ができるようになりました。
今回はそのカメラに ズームイン・ズームアウト の機能を追加し、より柔軟な操作を実現します。

特に、探索ゲームやストラテジー系ではズーム操作が重要になります。
この記事では、マウスホイール操作でズーム制御できるカメラの基本的な実装方法を学びます。

ズーム方法は2通りある?

白いTシャツ姿の若い女性が、ノートパソコンの画面を真剣に見つめている。ズーム手法を検討している様子のアニメ調イラスト。

カメラのズームって、実はやり方が2通りあるのをご存じでしたか?
ざっくり分けると、次のような方法があります。

  1. Camera.fieldOfView を変える方法(視野角の変化でズームっぽく見せる)
  2. Transform.position を変える方法(カメラの位置そのものを動かして距離を調整)

どちらにもメリットがありますが、今回のような自由視点カメラと組み合わせるなら、Transform.position を動かしてズームする方法が相性バツグンです。

これからは、この「カメラ自体が近づいたり遠ざかったりする方法」でズーム機能をつけていきましょう!

自由視点カメラにズーム機能を追加しよう

メガネをかけた若い日本人男性が、パソコン画面を見ながらノートに書き込みをしている。コードの改良に取り組む様子を描いたアニメ調イラスト。

ここからは、前回作成した自由視点カメラのスクリプトに、ズームイン・ズームアウトの処理を追加していきます。

今回も同じプロジェクトを使ってOKです。
マウスで視点をぐりぐり動かせる状態のカメラに、「ホイール操作で前後移動するズーム機能」を加えていきましょう!

まずは、ズームに必要な変数をスクリプトの冒頭に追加します。これらのパラメータは インスペクター(Inspector) からも調整可能です。

public float zoomSpeed = 10f;
public float minZoomDistance = 2f;
public float maxZoomDistance = 15f;
UnityのInspectorビューに表示されたズーム設定の変数(zoomSpeed、minZoomDistance、maxZoomDistance)

続いて、LastUpdate()メソッド内にマウスホイールの入力を取得するコードを追加します。

float scrollInput = Input.GetAxis("Mouse ScrollWheel");

この値はスクロール時に正(上方向)や負(下方向)の小さな数値が返ってきます。これを使ってカメラの前後移動をコントロールします。

ズーム方向にカメラを動かす処理を追加

フーディを着た若い日本人男性が、笑顔でモニターを操作している様子。カメラのズーム処理を加え、動作確認をしているようなアニメ調イラスト。

それでは、取得した scrollInput を使って、カメラをズームイン・ズームアウトできるようにしてみましょう。

ズームには、マウスホイールの回転量を取得する Input.GetAxis("Mouse ScrollWheel") を使います。
以下のコードを LastUpdate() 内の Input.GetAxis("Mouse ScrollWheel") 後に追加してください。

ズームの値(scrollInput)をカメラと対象との距離を表す distance に反映させることで、
ズームイン・ズームアウトのような動きを実現します。

// ズーム処理(マウスホイール)
float scrollInput = Input.GetAxis("Mouse ScrollWheel");
if (scrollInput != 0)
{
    distance -= scrollInput * zoomSpeed;
    distance = Mathf.Clamp(distance, minZoomDistance, maxZoomDistance);
}

zoomSpeed はズームの感度、minZoomDistancemaxZoomDistance は ズームできる範囲を制限するための変数です。

ズーム処理の後は、回転と同様にカメラの位置を再計算します。
その際、更新された distance が自然に反映されるため、カメラのズームが視覚的に有効になります。

if (Input.GetMouseButton(1)) // 右クリック中
{
    x += Input.GetAxis("Mouse X") * xSpeed * Time.deltaTime;
    y -= Input.GetAxis("Mouse Y") * ySpeed * Time.deltaTime;
    y = Mathf.Clamp(y, yMinLimit, yMaxLimit);
}

Vector3 offsetTarget = target.position + new Vector3(0, 1.5f, 0);
Quaternion rotation = Quaternion.Euler(y, x, 0);
Vector3 position = rotation * new Vector3(0.0f, 0.0f, -distance) + offsetTarget;

transform.rotation = rotation;
transform.position = position;

ズーム処理とカメラの位置・回転処理を LateUpdate() の中にまとめることで、
処理の競合やズームの打ち消しを防ぎ、より安定した挙動を実現しています。

プレイモードでズームの動作を確認しよう

UnityのInspectorでズーム速度や距離範囲を調整している様子

ズーム機能を実装したら、さっそく Unity のプレイモードで動作確認してみましょう!

右クリックを押しながらマウスを動かすと視点が回転し、
マウスホイールを回すとカメラがズームイン・ズームアウトするようになっていれば成功です。

ズーム操作に違和感がある場合は、以下のパラメータを調整してみましょう。

  • zoomSpeed:ズームの速さ(大きくすると速くズーム)
  • minZoomDistance:最も近づける距離
  • maxZoomDistance:最も遠ざけられる距離

ズームが早すぎると一気に近づきすぎたり、
逆に遅すぎると動いているのか分からなかったりします。

自分のゲームに合った感度に調整して、プレイヤーにとって快適なカメラ操作を目指しましょう!

ズーム感を分かりやすくするコツ

ズームの効果が分かりづらい場合は、カメラの正面にプレイヤーキャラやオブジェクトを配置してみましょう。
ズームに合わせて対象が大きく見えたり、小さくなったりすることで効果を直感的に確認できます。

ズーム機能を加えるとカメラの完成度がアップ!

Tシャツ姿の若い日本人男性が、両手を上げて喜んでいる。パソコン画面の前で達成感を感じている様子を描いたアニメ調イラスト。

今回は、前回作成した自由視点カメラに、ズームイン・ズームアウト機能を追加しました。

マウスホイールで直感的にカメラの距離を調整できるようになったことで、
視認性や操作性がグッと向上したのではないでしょうか。

ズーム処理は distance という変数を使って行い、
カメラの回転・位置と一緒に LateUpdate() で制御することで、自然で滑らかな動きを実現できました。

自由視点カメラとズームが組み合わさることで、より多くのゲームジャンルに対応できる汎用的なカメラが完成します。

次のチャレンジへ!

次回はこのカメラをベースに、キャラクターを追従しながら回転・ズームもできるカメラを目指していきます。
ちょっとしたミニゲームを作るような感覚で、応用的なカメラ制御にチャレンジしていきましょう!

お疲れさまでした 😊

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次