【Unity】Timelineと移動を連携して、特定のタイミングから"指定の座標"へ移動させる
今回はTimelineの機能を使用するが、「目標地点が異なる」場合を対処する方法についてです。
例えば「距離の異なる崖をジャンプで超える」や「位置が毎回異なる敵に攻撃を仕掛ける」といった物をTimelineで制御する場合の話です。
Timelineアニメーションの「移動」は基本的に固定距離
移動で考えつくのはアニメーションによる移動ですが、これは基本的に固定の距離を移動する物になります。AnimationControllerを動かすキャラクターにセットする事でTimelineで指定された位置ではなく「現在座標からの移動」に設定することが可能ですが、距離が異なる場合にはアニメーションでの実現は難しいです。
それこそAnimationClipを動的に作るとかしない限り。
Transform Tween Trackで座標を指定して移動する
想定した座標以外でも移動するため、「指定した座標から指定した座標へ移動」する法式を使用します。
とは言え初期機能ではこの機能は含まれていないので、Default Playablesに含まれるTransofrm Tween Trackを使用します。
上手く使うと、下のように長さの異なる崖を同じTimelineで飛び越える事が出来るようになります。
アニメーションは「ジャンプ前」「ジャンプ開始」「ジャンプ中」「着地開始」「着地」「立ち上がる」の5つの動きで構成されていますが、ちゃんとTimelineで調整したので、違和感なく移動が出来ています。
実際にTransform Tween Trackを使ってみる
実際にTransform Tween Trackを使用してみます。
まずはキャラクターの移動パスを作成します。単純なもので、スタート地点と終了地点にGameObjectを配置するだけです。
オブジェクトにはアイコンを付けておくと色々と楽です。選択とか
なお、オブジェクトの向きも影響します。移動方向に向きを変えたい時とかはオブジェクトの向きを気をつけたほうが良いです。
次にDefault Playablesを導入します。
https://assetstore.unity.com/packages/essentials/default-playables-95266
あとはTimeline側の設定です。
トラックを右クリックすると追加出来るメニューにTransform Tween Trackが増えてるので、コレを追加します。
Trackには動かす対象のTransformをセットします。今回の場合はユニティちゃんのルートTransform。
次にクリップ側でAdd Transform Tween Clipを足して、移動タイミングを指定します。最初のタイミングではスタート地点からスタート地点へ、次はスタート地点からゴールまで、最後はゴールからゴールまで。
同じ位置への移動はゲームを再生するとそれ程必要無いかもしれませんが、プレビューだとコレが無いと上手く動きません。
これで、崖から崖へのジャンプが実現出来ます。
Timelineの開始地点がStartの位置とズレている場合
ここで一つ悩ましい問題が、TimelineでキャラクターのTween開始地点と実際のキャラクターの位置がズレている場合です。何もしないとTimeline開始時にワープしてしまいます。
これを解決するには、Ease In Durationをセットします。
これで開始点とTimelineの座標とのブレンドが行われて、いきなりワープする事は無くなります。
カーブを表現したい
カーブを表現したい場合、二つの移動をブレンドします。
例えば下のように二つの移動を持つ場合、この二つをブレンドするとカーブになります。
パスエディターが欲しい? ・・・それな
なんか変更した値が反映されない場合
プレビュー外して、もう一回入れる。
特にTransform Tween TrackはGraph生成時に座標の取得を行っているので、コレがモロに来ます。
動的に移動先を動かしたい場合
Transform Tween TrackはExpose Propertyで実現しているので、登録が面倒です。なのでstartとendをTimelineの子プレハブ的な感じで生成しておいて、startとendを動かすのが良いです。
もしくはScriptableObjectに格納したVector3に準じて動く感じに改造するとか。
関連
移動系トラブル
tsubakit1.hateblo.jp普通にキャラを動かす場合