Splinesを使って、車のゲームオブジェクトをパスに沿って移動させてみました。
Splinesで簡単に曲線を作るで車が通るためのパスを作ります。
Spline Animateコンポーネント
スプラインに沿ってゲームオブジェクトを移動させるには、「Spline Animate」コンポーネントを使います。車にSpline Animateコンポーネントをつけると車が地面に埋まります。
そこで、空のゲームオブジェクトを作り、車の親にしました。
空のゲームオブジェクトにSpline Animateコンポーネントを付けます。
Spline Animateコンポーネントの「Spline」に、シーンにあるスプラインゲームオブジェクトをアタッチします。
車の親のゲームオブジェクトを地面と同じ高さにして、子の車を真上に移動し、タイヤが地面に接触するように置きます。
車のオブジェクトには、余分な移動や回転を作らないようにします。
親のゲームオブジェクトを見ると、上方向がYで、前方向が-Xでした。
なので、Spline AnimateコンポーネントのForward Axisを「Object X-」にしました。Methodを「Time」にすると、スプラインを一周する時間を指定できます。
Play On Awakeのチェックを入れると、でプレイモードに入ったときに自動でアニメーションが開始されます。
向きを調整
Align Toを「Spline Element」にすると、スプラインの方向に整列します。
「Spline Object」にすると、スプラインゲームオブジェクトの向きにForward Axisが向くようです。ゲームオブジェクトのZの方向が車の -X になっています。
「World Space」にすると、ワールド空間のZ方向に、車の -X を向けます。
「None」だと整列されないので、車は直前の向きでスタートするようです。移動中に自由に回転させることができます。
開始オフセット
Start Offsetで開始位置を設定できます。
Start Offsetを0.5で一度だけ再生すると、スプラインの中間で始まり、始点を通過して、中間あたりで終了します。
速度を設定
Methodでアニメーションの速度を変更できます。Methodを「Time」にすると、その下のDurationで、一周に要する時間を秒単位で設定できます。
「Speed」にすると、speedでアニメーションの速度を設定できます。
Easing
Easingモードでアニメーションの速度を変化させ、より自然な動きを作れます。Noneだと変化しません。
ループモード
Loop Modeを「Once」にすると、一度だけ再生されます。「Loop Continuous」にするとループ再生されます。
「Ease In Then Continuous」では、Easingに「Ease In Only」や「Ease In-Out」が設定されている時、一度目のアニメーションにのみ、Easingが適用されます。
「Ping-Pong」にすると、アニメーションが言ったり来たりします。Easingも適用されています。
スクリプトから再生
PlayOnAwakeのチェックをオフにして、SplineAnimateをスクリプトから再生してみます。UnityEngine.Splines名前空間にあります。
- using UnityEngine;
- using UnityEngine.Splines;
- using UnityEngine.InputSystem;
-
- public class SplineTest : MonoBehaviour
- {
- [SerializeField] SplineAnimate splineAnimate;
-
- void Update()
- {
- var current = Mouse.current;
- if (current != null)
- {
- // 左ボタンの入力状態取得
- var leftButton = current.leftButton;
-
- // 左ボタンが押された瞬間かどうか
- if (leftButton.wasPressedThisFrame)
- {
- if (splineAnimate.IsPlaying)
- {
- // 停止する
- splineAnimate.Pause();
- }
- else
- {
- // 再生する
- splineAnimate.Play();
- }
- }
- }
- }
- }