この記事でのバージョン
Unity 2018.4.20f1
DOTween Pro 1.0.178
はじめに
Unityで位置や大きさなどのアニメーション、
いわゆるTweenを実装するアセットとしてお馴染みのDOTween。
DOTween Pro | Visual Scripting | Unity Asset Store |
今回はそのDOTweenで当たり判定がある、つまりすり抜けない移動をする方法の紹介です。
イメージとしては以下のような感じ。
DOTweenでRigidbody(2D)を使った当たり判定のある移動をする方法
DOTweenはtransformのDOMoveを使う事で簡単に移動処理を実装する事が出来ますが、
これだとtransform.positionを操作した時のように頻繁にすり抜けます。
//(-4.27, 0, -7.34)に0.5秒で移動 transform.DOMove(new Vector3(-4.27f, 0, -7.34f), 0.5f);
そもそも上記のように記述できるのは、
TransformにDOMoveという拡張メソッドが実装されているからなのですが、
実はTransform同様にRigidbodyにもDOMoveという拡張メソッドが実装されています。
しかもRigidbodyのDOMoveは内部でRigidbodyのMovePositionを使っています(=当たり判定がある)。
つまり当たり判定がある移動をしたい場合はRigidbodyのDOMoveを使えば良いという事です。
//(-4.27, 0, -7.34)に0.5秒で移動(移動中も当たり判定有り) gameObject.GetComponent<Rigidbody>().DOMove(new Vector3(-4.27f, 0, -7.34f), 0.5f);
さらにRigidbodyにはDOMove以外にもDORotateやDOPath等の拡張メソッドも実装されており、
それらも、もちろん当たり判定があるTweenになります。
(DOPathについてはこちらの記事参照の事)
//TransformのDOPath(移動中の当たり判定がない) transform .DOPath(_targetList.Select(target => target.position).ToArray(), 2, PathType.CatmullRom) .SetLookAt(0.01f, Vector3.forward));
//RigidbodyのDOPath((移動中も当たり判定有り) gameObject.GetComponent<Rigidbody>() .DOPath(_targetList.Select(target => target.position).ToArray(), 2, PathType.CatmullRom) .SetLookAt(0.01f, Vector3.forward);
なお、DOTweenのRigidbodyの拡張メソッドを使う際は
RigidbodyのIsKinematicは有効にしておく必要があります。
ちなみにRigidbody2Dも同様にDOMove等の拡張メソッドが用意されています。