はじめに
今回は手ブレをDoTweenというアセットを用いて実装してみようという記事になります!
実際にやってみた例はこんな感じ。
これは開発中のゲームの一場面ですが、DoTween
というアセットを用いることでたった一行で作ることができます。
では早速みていきましょう。
作り方
手ブレに用いるメソッドはこちら。
DOShakePosition(float duration, float/Vector3 strength, int vibrato, float randomness, bool fadeOut)
名前 | 意味 |
---|---|
duration | 持続時間 |
strength | 揺れの強さ |
vibrato | どのくらい振動するか |
randomness | どれくらいランダムにするか(0 ~ 180) |
fadeOut | 持続時間が終わるときに自動的にフェードアウトするかどうか |
これはTransform
もしくはCamera
などの拡張メソッドとして定義されており,大差ありませんがCamera
に対して今回は使ってみたいと思います。
using UnityEngine; using DG.Tweening; public class CameraShaker : MonoBehaviour { // インペクターから設定する [SerializeField] private Camera _camera; private void Start() { _camera.DOShakePosition(duration: 10, strength: 1, vibrato: 1, fadeOut: false) .SetLoops(-1); } }
デフォルトでは結構元気にカメラが動くので、vibrato
を小さい値にすることでゆっくりにできます。
さらにfadOut
はデフォルトでtrue
ですが、ループさせる場合はフェードアウトさせない方が良いでしょう。
SetLoop(-1)
をすることで永遠にループするようになります。
ちなみに最初の頃はSetLoop
メソッドの位置に驚かれる方もいるかもしれませんが、これはメソッドチェーンと呼ばれるものでどんどん後ろにメソッドを追加することができます。
また手ブレを止めたい場合は、返り値のTweener
からKill
メソッドを呼びます。
using System.Threading.Tasks; using DG.Tweening; using UnityEngine; public class CameraShaker : MonoBehaviour { // インペクターからを設定する [SerializeField] private Camera _camera; private async Task Start() { var tweener = _camera.DOShakePosition(duration: 10, strength: 1, vibrato: 1, fadeOut: false) .SetLoops(-1); // 10ms秒待つ await Task.Delay(10); tweener.Kill(); } }
またDoTween
に詳しい方はComplete
がいいんじゃないかと思われるかもしれませんが、確かループだとダメだったような気がします。
さいごに
画面がずっと静止しているよりは少し動きがあったほうが、見た目がよくなるような気がします。
このアセットを用いればお手軽にできるので、是非試してみてください。
ではまた。