まきゼミ技事録!

とあるゼミのプログラマー達が送る技術ブログのようなもの

指定のコースにオブジェクトを移動させる『DOTween』

さんかくです。(/・ω・)/

今回は指定のコースを走らせるためにDOTweenを使用して実装しましたので紹介します。
これを使用するだけで簡単に自由な移動をさせることができます。

こんな感じに移動できます。
f:id:MakiZemi:20181028223457g:plain:w200
今回実装したオブジェクトの子オブジェクトとしてカメラを設定するとできます。

アセット

assetstore.unity.com
このアセットではオブジェクトの移動などのアニメーションを少ないコードで実装することなどができます。
またプロでは簡単な動作はコードを書かずにエディター上の設定のみで動かすこともできます。無料版でも十分に使えます。

環境

Unity2017.4.0f1
DOTween1.1.640
一部DOTweenProの機能を仕様しているので無料版で使える部分は自分で確認してください。

使い方
  1. 動かしたいオブジェクトを選択
  2. AddComponentでDOTweenPathを選択
  3. Ctrl+Shiftで動かしたい位置を選択

f:id:MakiZemi:20181027112009p:plain:w200
このようにScene上に白い点と白い線でルート表示されます。
Alt+Shiftで選択肢た点を消すことができます。

これで実行すると動きが確認できます。とても簡単です!
f:id:MakiZemi:20181027120139g:plain:w300
ロッコのように進んでいる方向に向いてほしいので、
『OrientationをToPath』にしています。
オブジェクトの角度を移動方向にしてくれるので、常に移動方向を向いています。

『PathTypeをCatmull Rom』にすることによって直線ではなく曲線に移動させることができます。

今回は一周させるために『Close Path』を選択し閉じています。

また、Editor上で移動する点を設置すると下の画像のように細かい数値でずれていたりします。
f:id:MakiZemi:20181027112018p:plain:w200
下のほうにあるwaypointsで設置した点の細かい数値を見たり、編集できるのでここで調整しましょう。

スクリプトで実行

同じことをスクリプトで実行することももちろんできます。

using UnityEngine;
using DG.Tweening;
public class TestPath : MonoBehaviour {
	void Start () {
//行かせたい目的地
//必要ならば最初の位置もスクリプトでやるとEditorで設定しなくて済む
        Vector3[] path = new Vector3[3]
        {
            new Vector3(-10,0,0),
            new Vector3(0,0,10),
            new Vector3(10,0,0)
        };
        transform.DOPath(path,2,PathType.CatmullRom)
                        .SetOptions(true)
                        .SetLookAt(0.01f,transform.forward);
	}
}

DOTweenを使用するには宣言します。

using DG.Tweening;

DoPath(Vector3目的地の配列,時間,曲線か直線か)
SetOptions(Close Path設定し閉じるかどうか)
SetLookAt(lookAhead,オブジェクトの前方を設定し向かせる)
lookAheadがよくわからないのですが、0.01fで基本大丈夫そうです。

transform.DOPath(path,2,PathType.CatmullRom)
                .SetOptions(true)
                .SetLookAt(0.01f,transform.forward);

実行結果
f:id:MakiZemi:20181028221530g:plain:w300
同じ動きができています。
前回のgifと違うところは、前回はEditor上ですでにDOTweenPathを設定していたのでルートの線が見えてたと思いますが、今回は実行時スクリプトから生成されるので、最初にルートの線が見えてません。

終わりに

どうやっていろんなルートを走らせるのか、計算が大変そうだなと身構えてましたが、このアセットのおかげで簡単に実装できてしました。
デザイナーさんとかでも触りやすく思った移動ができると思うのでぜひ使ってみてください(*´▽`*)