Unity:マウスホイールでカメラの前後移動(ドリーイン、ドリーアウト)を行う

今回はマウスホイールでカメラの前後移動(ドリーイン、ドリーアウト)をスクリプトで制御する方法を試してみました。

ホイール回転を取得してカメラを移動する

まずはシンプルにマウスホイールを回転してカメラの前後移動を行います

シーンの作成

これまでの記事で使用している Area Light でライティングを行った部屋のシーンを使用します。

スクリプト

前後移動のスピードを変えられるように変数 speed を用意しました

完成したスクリプトを[Inspector]ウィンドウで確認。speed フィールドに初期値の1が入っています。

動作確認

マウスホイールの回転に合わせてカメラが前後移動できるようになりました。

カメラの前後移動を制限する

カメラの移動範囲の制限方法を色々方法を考えたのですが、色々調べたもののよくわからなかったので、今回はコライダーを使った当たり判定で制限することにしました。

コライダーの配置

カメラ、ドリーイン、ドリーアウトの限界にSphere コライダーコンポーネントを配置します。
[Hierarchy]ウィンドウ > [Create] > Create Empty を選択して、空オブジェクトを2つ作成。名前を次のように変更します。

  • Dolly In Limit -ドリーイン限界位置のコライダー
  • Dolly Out Limit ドリーアウト限界位置のコライダー
[Inspector]ウィンドウ > Add Componen > Physics > Sphere Collider を選択。

Sphere Collider コンポーネントは Is Trigger のチェックを入れておきます。

MainCamera にもコライダーを追加。[Scene]ビューでシーンを右側から見ると、コライダーを配置した状態はこのようになります。左側が Dolly Out Limit、右側が Dolly In Limit コライダーです。

カメラの設定

MainCamera には Rigidbody コンポーネントを追加します。
[Inspector]ウィンドウ > Add Componen > Physics > Rigidbody を選択。

Rigidbody コンポーネントは Use Gravity のチェックを外し、スクリプトで移動を制御するので Is Kinematic のチェックを入れておきます。

スクリプト編集

スクリプトにカメラとコライダーの衝突判定を行い、カメラと衝突したら移動を停止する処理を追加します。
衝突判定は OnTriggerEnter と OnTriggerExit のメソッドで処理。コライダーはあらかじめ変数に格納して、衝突判定時に判別を行っています。

コンポーネントの設定

Main Camera を選択して[Inspector]ウィンドウ > CameraDolly (Script) コンポーネントを確認。
dolly In LimitCol とdolly Out LimitCol フィールドにそれぞれコライダーを割り当てます。

UIスライダーでドリー速度を変更できるようにする

最後にドリー速度をUIスライダーで変更できるようにしました。スクリプト CameraDolly にスライダー処理を追加するのがシンプルなのですが、今回はスライダーの処理を分けて別のスクリプト ChangeSliderValue を作成して、スライダーの値をスクリプト CameraDolly に渡すようにしました。

スライダーオブジェクトの作成

[Hierarchy]ウィンドウ > [Create] > UI > Slider を選択。[Inspector]ウィンドウ > Slider (Script) を選択。Min Value とMax Value を設定。 Whole Numbers にチェックを入れて5段階に切り換えるようにしました。

スクリプト編集

スクリプトは Canvas 割り当てます。[Inspector]ウィンドウ > [Add Component]をクリック。名前 ChangeSliderValue でスクリプトを作成。

コンポーネントの設定

Canvas を選択して[Inspector]ウィンドウ > Change Slider Value (Script) を確認します。
Slider フィールドに作成したスライダーオブジェクト、Camera Dolly フィールドにはスクリプト CameraDolly を割り当ててある Main Camera をドラッグ&ドロップで割り当てます。

WebGL ビルド

完成したシーンを WebGL でビルドしました。画面右下のスライダーでカメラ前後移動の速度を変更できます。
画像クリックで再生されます。(ファイルサイズ:約16MB)

参考Webサイト

今回の記事はこちらのWebサイトを参考にさせていただきました。
【Unity】マウスホイールでカメラの向きにドリーイン・ドリーアウトさせる

Unityで、マウスホイールでカメラをドリーイン・ドリーアウトする方法を紹介しています。 カメラの正面に向かってドリーインするところがポイントです。