【Unity】Cinemachineカメラを揺らす(シェイクさせる)スクリプト

Unity

別の記事で普通のカメラを揺らす(シェイク)方法を紹介したので、今回はそれをCinemachineで解説をしようと思います。

3Dで解説していますが2Dでも使えるものですので是非参考にしてみてください。

準備

まずは、Cinemachineを用意します。

Cinemachineをインストールしていない方はPackage Managerからインストールをしてください。

インストールの仕方はこちらの記事を参考にしてください↓

インストールができたら、ヒエラルキーウィンドウで右クリック>Cinemachine>VitualCameraの順でVitualCameraを生成しましょう。

VitualCameraのインスペクターで二つの項目を変更します。

Noiseを「Basic Multi Channel Perlin」に変更すると、いろんな項目が出てきます。

Noise Profileを「6D Shake」に。

Frequency Gainを「1」にしましょう。

それでは、スクリプトで制御していくようにします。

揺らすスクリプト

「CameraShaker」というスクリプトを作成し、このように書きましょう。


using System.Collections;
using System.Collections.Generic;
using Cinemachine;
using UnityEngine;

public class CameraShaker : MonoBehaviour
{
    public static CameraShaker Instance { get; private set; }

    private CinemachineVirtualCamera cam;
    private float shakeTimer;

    //このスクリプトをインスタンス化
    private void Awake()
    {
        Instance = this;
        cam = GetComponent<CinemachineVirtualCamera>();
    }

    //この関数に揺れの強さと揺れる時間の引数を渡す
    public void ShakeCamera(float intensity, float time)
    {
        CinemachineBasicMultiChannelPerlin cinemachineBasicMultiChannelPerlin =
            cam.GetCinemachineComponent<CinemachineBasicMultiChannelPerlin>();

        cinemachineBasicMultiChannelPerlin.m_AmplitudeGain = intensity;
        shakeTimer = time;
    }

    void Update()
    {
        //揺れ時間が終わったら揺れを止める
        if (shakeTimer > 0)
        {
            shakeTimer -= Time.deltaTime;
            if (shakeTimer <= 0f)
            {
                CinemachineBasicMultiChannelPerlin cinemachineBasicMultiChannelPerlin =
                cam.GetCinemachineComponent<CinemachineBasicMultiChannelPerlin>();

                cinemachineBasicMultiChannelPerlin.m_AmplitudeGain = 0f;
            }
        }
    }
}

この「Camera Shaker」をVitualCameraにアタッチします。

しかし「Camera Shaker」は、「他のオブジェクトから呼び出されたら揺れる」ようになっているのでこれだけでは揺れません。

「Camera Shaker」を他のオブジェクトから呼び出してみましょう。

適当に「CameraManager」というオブジェクトを作り、カメラの揺れを呼び出すスクリプトを追加します。

「Camera Shaker」はこのように呼び出します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ShakeCameraScript : MonoBehaviour
{
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            CameraShaker.Instance.ShakeCamera(5, 0.2f);
        }
    }
}

これで、左クリックで強さが「5」、持続時間が「0.2」の揺れを呼び出すことができます。

実行をするとこのようになりました!

このように揺れを簡単に呼び出すことができました!

まとめ

いかがだったでしょうか?

CameraShaker.Instance.ShakeCamera(揺れの強さ, 揺れの持続時間);

この一行で簡単に揺らしてゲームに迫力を持たせることができます!

参考にした動画↓

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