LoginSignup
0
3

More than 3 years have passed since last update.

【Unity】カメラの揺らし方

Posted at

方法

揺れるという動きを「視点が球内部のランダムな点に移動し続けた後、元の視点に戻る」という風に解釈します。掴みにくい方は以下の動画の立方体を追ってみてください。球内部の点にランダムで移動しているだけですが、立方体に注視することで目が回るような感覚に陥ると思います。

実装

実装はシンプルで以下のコードになります。

CameraShake.cs
using System.Collections;
using UnityEngine;

public class CameraShake : MonoBehaviour
{
    public IEnumerator Shake(float duration, float magnitude)
    {
        Vector3 originalPosition = transform.position;
        float elapsed = 0f;

        while (elapsed < duration)
        {
            transform.position = originalPosition + Random.insideUnitSphere * magnitude;
            elapsed += Time.deltaTime;
            yield return null;
        }
        transform.position = originalPosition;
    }
}

球の半径とカメラが揺れる時間を引数に渡して使用します。

transform.position = originalPosition + Random.insideUnitSphere * magnitude;

Random.insideUnitSphereとは半径1の球体の内部の点をランダムに返すメソッドになります。半径 = 1 * magnitudeとすることで、揺れの大きさを決定しています。

elapsed += Time.deltaTime;

ランダムに位置を変更する毎の時間をelapsedに追加しておき、指定時間を超えるまで処理を続けます。

使用方法

以下のように呼び出して使用します。

StartCoroutine(cameraShake.Shake(0.3f, 0.6f));

使用用途に合わせて、揺れの大きさや、揺れ時間を変更するとGOOD!

実装動画

 終わりに

  • 注意点として、Canvas内部は揺れません。UIや背景等も揺らしたい場合は、Canvasから外しましょう。
  • 一回作成しておくと、使い回しのきく便利なプログラムになると思います。是非参考にしてみてください。
0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3