Unityでのカメラシェイクのしかた

現時点(2022年6月)ではUnityの機能としてはないのでちょっとしたコードを書く必要があるようです。
そこでこちらを参考に手を加えたものを作りました。

使い方

・下記スクリプトをカメラにAddComponent(D&D)
・カメラを揺らしたい箇所でこのように呼び出す CameraShake.Instance.Shake(0.25f, 0.2f);
・上下にだけ揺らしたい場合はコメントアウトに書いてあるように変更する new Vector3(pos.x, y, pos.z);

スクリプト

using System.Collections;
using UnityEngine;

public class CameraShake : MonoBehaviour
{
    public static CameraShake Instance { get; private set; }
    public bool Enable { get; set; }
    private void Awake()
    {
        if (Instance != null)
        {
            Destroy(this);
            return;
        }
        Instance = this;
    }
    public void Shake(float duration, float magnitude)
    {
        StartCoroutine(DoShake(duration, magnitude));
    }

    private IEnumerator DoShake(float duration, float magnitude)
    {
        Enable = true;
        var pos = transform.localPosition;

        var elapsed = 0f;

        while (elapsed < duration)
        {
            if (!Enable) {
                break;
            }
            var x = pos.x + Random.Range(-1f, 1f) * magnitude;
            var y = pos.y + Random.Range(-1f, 1f) * magnitude;

            transform.localPosition = new Vector3(x, y, pos.z);
            // transform.localPosition = new Vector3(pos.x, y, pos.z);// 上下にだけ揺らしたい場合

            elapsed += Time.deltaTime;

            yield return null;
        }

        transform.localPosition = pos;
        Enable = false;
    }
}

参考

【Unity】カメラを揺らすスクリプト
https://baba-s.hatenablog.com/entry/2018/03/14/170400

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です