カメラが揺れる処理を実装する[Unity+Cinemachine]

ゲームでダメージなどが発生した時に、カメラが揺れる演出を作る方法。Cinemachineを使うことで簡単に実装することができます。

目次

完成イメージ

今回の内容でどんなものが出来るのか確認してください。プロジェクトでCinemachineを使っていない場合、変更が少し大変かも。

カメラの揺れ・シェイク演出

下図はタワーディフェンスゲームを作っていたときの実用例です。お城に敵が突っ込んできたタイミングで揺れる演出が入るだけでそれっぽい!

前提など

今回の実装ではプロジェクトのカメラにCinemachineを使います。

くっそ個人的な意見ですが、Unityでゲーム制作する上でCinemachineはほぼ必須だと思っています。だいたいのカメラ演出で実装したいことはサポートされていることが多いです。

今回の処理も、揺れの強度や余韻時間などの設定を行いたい場合、複雑な実装が必要になりますが、パラメータ設定のみで終わるのもCinemachineの強みと言えます。

フェアリー

Cinemachineは非常に便利ですが、機能も多いので知ることから始めるといいでしょう。

揺らすための下準備

必要なパッケージや、コンポーネントを用意します。デフォルト設定でお手軽設定にしていますが、実際には揺らす側のフィルター設定を行うことも可能です。

パッケージ「Cinemachine」の導入

パッケージマネージャーからプロジェクトにCinemachineを導入します。導入後はVirtualCameraを追加します。

  • パッケージマネージャーから「Cinemachine」を追加
    • Window>Package Manager
    • パッケージマネジャーウインド左上のプルダウンメニューを「Unity Registry」に変更
    • 「Cinemachine」を探してインストール
  • GameObjectメニューからCinemachine>Virtual Cameraを追加(1つ目の場合は名前がCM vcam1)

揺らされる側:Extension「Impulse Listener」を追加

カメラを揺らすには揺らす側と揺らされる側に設定を入れる必要があります。まずは揺らされる方から設定追加

  • 揺らされる拡張機能を追加
    • CM vcam1ゲームオブジェクトを選択
    • Cinemachine Virtual CameraコンポーネントのAdd Extensionの(select)プルダウンからCinemachineImpulseListenerを追加
    • コンポーネントの設定はデフォルトのまま

揺らす側:「Impulse Source」を追加

揺らす側のコンポーネントはこの後作るスクリプトと同じインスペクターに配置します。そのため空のゲームオブジェクトを用意しましょう。設定関係のパラメータは参考値です。自分好みにカスタマイズしてみてください。

  • 空のゲームオブジェクトを作成(名前:Shaker)
  • Cinemachine Impulse Sourceコンポーネントを追加(Add Component)
    • このコンポーネントは名前を途中まで入力して探す必要あり。私は見つけられませんでした。
  • コンポーネントの設定は下図を参考にしてください。
    • Impulse Type:Legacy
    • Raw Signal:6D Shake(右の丸ポチから選択)
    • Amplitude Gain:3
    • Frequence Gain:3
    • Sustain Time:0.1
    • Decay:0.1
    • Default Velocity:2,1,0
  • 再生をしてテストする
    • ゲームを再生するとInvokeボタンを押すと揺れます
スライム

満足の行く揺れ具合になるまで調整してみよう

スクリプトを作って揺らすッ!!

実際に揺れる確認はできたと思います。あとはゲームで利用できるようにスクリプトから呼び出してみましょう。

スペースキーで揺れを要求するスクリプト

今回は揺らす人として、Shakerというスクリプトを作成します。スペースキーを押すと揺れるようにしたいと思います。

using UnityEngine;
using Cinemachine;

public class Shaker : MonoBehaviour
{
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            var impulseSource = GetComponent<CinemachineImpulseSource>();
            impulseSource.GenerateImpulse();
        }
    }
}

実際に揺らしてみた

Shakerスクリプトはかならず「Cinemachine Impulse Source」と同じゲームオブジェクトにアタッチする必要があります。慣れてくると、スクリプトファイルを見ただけでどこにあるべきかわかるようになってきますよ。

  • Shakerスクリプトをアタッチ
    • GameObject「Shaker」にアタッチ
  • 実際に揺れるか確認する
    • ゲームを起動
    • Spaceキーを押す
    • 揺れッ!
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメント一覧 (1件)

コメントする

目次