方法
揺れるという動きを**「視点が球内部のランダムな点に移動し続けた後、元の視点に戻る」**という風に解釈します。掴みにくい方は以下の動画の立方体を追ってみてください。球内部の点にランダムで移動しているだけですが、立方体に注視することで目が回るような感覚に陥ると思います。
記事用
— TANUKEINA (@FH1b4mzzirXPoiM) January 16, 2021
球内部の点にランダム移動 pic.twitter.com/TODhvRherq
実装
実装はシンプルで以下のコードになります。
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!
実装動画
記事用
— TANUKEINA (@FH1b4mzzirXPoiM) January 17, 2021
カメラを揺らす pic.twitter.com/skLn7U0KWu
終わりに
- 注意点として、**
Canvas
内部は揺れません。**UIや背景等も揺らしたい場合は、Canvas
から外しましょう。 - 一回作成しておくと、使い回しのきく便利なプログラムになると思います。是非参考にしてみてください。