この記事でのバージョン
Unity 2018.4.20f1
DOTween Pro 1.0.178
はじめに
Unityで位置や大きさなどのアニメーション、
いわゆるTweenを実装するアセットとしてお馴染みのDOTween。
DOTween Pro | Visual Scripting | Unity Asset Store |
今回はそのDOTweenの機能のうちの一つであるDOPathの紹介的な記事です。
DOPathは名前の通り指定した座標を通るようなパスを作成して、その通りに移動するというもので、
イメージとしては以下のような感じ。
なお、記事中では以下のアセットを使っています。
Animals - Simon the Raccoon | 3D Animals | Unity Asset Store |
DOPath
さっそくDOPathの使い方からですが、
一番シンプルなのは移動する座標(Vector3)の配列と移動時間を指定する方法です。
なお、DOLoacalPathにするとローカル座標での移動になります。
/*transformはアライグマのtransform*/ //指定した2つのポイントを通るように4秒かけて移動する transform.DOPath( path : new Vector3[] {new Vector3(0, 0, 4), new Vector3(4, 0, 4)}, //移動するポイント duration : 4f //移動時間 );
ちなみにScene上に移動するルートが表示されるのも地味に嬉しかったりします。
曲線的に移動
さきほどの例では直線的に移動をしていましたが、
pathTypeにPathType.CatmullRomを指定する事で滑らかな曲線で移動する事も可能です。
//指定した2つのポイントを通るように4秒かけて曲線的に移動する transform.DOPath( path : new Vector3[] {new Vector3(0, 0, 4), new Vector3(4, 0, 4)}, //移動するポイント duration : 4f, //移動時間 pathType : PathType.CatmullRom //移動するパスの種類 );
オブジェクトの座標を元に移動
「特定のオブジェクトの場所を通過したい」みたいな場合はLINQのSelectを使うと簡単に実装出来ます。
//通過したいオブジェクト達(Inspectorで設定) [SerializeField] private List<GameObject> _targets;
//通過したいオブジェクトを通るように10秒かけて曲線的に移動する transform.DOPath( path : _targets.Select(target => target.transform.position).ToArray(), //移動する座標をオブジェクトから抽出 duration : 10f, //移動時間 pathType : PathType.CatmullRom, //移動するパスの種類 );
さらにSetLookAtを使う事で移動中の向きを変える事が出来ます。
なお、第一引数で何秒後の地点を基準にするか、第二引数で見る方向を指定します。
//通過したいオブジェクトを通るように10秒かけて曲線的に移動する transform.DOPath( path : _targets.Select(target => target.transform.position).ToArray(), //移動する座標をオブジェクトから抽出 duration : 10f, //移動時間 pathType : PathType.CatmullRom, //移動するパスの種類 ) .SetLookAt(0.05f, Vector3.forward); //0.05秒後に通過する場所を見るように
さらにさらにOnWaypointChangeを使うことで、各座標に到達した事を検知する事も出来ます。
transform.DOPath( path : _targets.Select(target => target.transform.position).ToArray(), //移動する座標をオブジェクトから抽出 duration : 10f, //移動時間 pathType : PathType.CatmullRom //移動するパスの種類 ) .SetLookAt(0.05f, Vector3.forward) //0.05秒後に通過する場所を見るように .OnWaypointChange(pointNo => { //通過したオブジェクトを非表示にする if (pointNo > 0) { _targets[pointNo - 1].SetActive(false); } });
プログラムなしで実行する方法
ここまではプログラムからパスを指定して実行していましたが、
DO Tween PathというコンポーネントをAddする事でプログラムなしで実装する事も可能です。
自動で実行するかのAutoPlayや、移動時間のDuration等の設定はもちろん
パス自体もScene上をSHIFT +CMDを押しながらクリックする事で指定出来ます。
ただし、Retinaディスプレイだとクリックした座標がズレるので使えないっぽいです。