モーションの制御
Bind()やRunWithoutBinding()などのモーションを作成するメソッドは全てMotionHandle構造体を戻り値に持ちます。
var handle = LMotion.Create(0f, 10f, 2f).RunWithoutBinding();
この構造体を介してモーションの制御を行うことができます。
モーションの完了/キャンセル
再生中のモーションを完了させるにはComplete()を呼び出します。
var handle = LMotion.Create(0f, 10f, 2f).RunWithoutBinding();
handle.Complete();
再生中のモーションをキャンセルするにはCancel()を呼び出します。
var handle = LMotion.Create(0f, 10f, 2f).RunWithoutBinding();
handle.Cancel();
モーションの存在チェック
上記のメソッド/プロパティはモーションが既に終了している、またはMotionHandleが初期化されていない場合に例外をスローします。MotionHandleの指すモーションが存在しているかをチェックするにはIsActive()を使用します。
var handle = LMotion.Create(0f, 10f, 2f).RunWithoutBinding();
if (handle.IsActive()) handle.Complete();
また、モーションが存在していたらComplate() / Cancel()を呼び出したい場合、TryComplate() / TryCancel()を用いて簡潔に記述できます。
handle.TryComplete();
handle.TryCancel();
モーションの再利用
デフォルトでは完了したモーションは自動的に破棄されるため、MotionHandleを再利用することはできません。
同じモーションを再利用したい場合はPreserve()を使用します。これを呼び出すことで、完了後にモーションが破棄されなくなります。
// Preserve()を呼び出す
handle.Preserve();
// 完了後も再利用できる
handle.Complete();
handle.Time = 0;
ただし、Preserve()を呼び出したモーションは明示的にCancel()が呼ばれるまで動作し続けます。使用後はCancel()を呼び出すか、AddTo()でGameObjectなどにライフタイムを紐づけてください。
モーションの再生速度
MotionHandle.PlaybackSpeedプロパティを操作することで、モーションの再生速度を変更することができます。これを使用してモーションのスロー再生や逆再生、一時停止などを行うことができます。
var handle = LMotion.Create(0f, 10f, 2f).RunWithoutBinding();
handle.PlaybackSpeed = 2f;
モーションを手動で制御する
Timeプロパティを用いることで手動でモーションを制御することができます。
// モーションの経過時間を手動で設定する
handle.Time = 0.5;
ただし、Timeを操作して完了させたモーションもデフォルトでは自動的に破棄されます。手動でモーションを制御する場合はPreserve()を用いると良いでしょう。
モーションの情報を取得する
MotionHandleのプロパティからモーションのデータを取得できます。
// ループあたり長さ
var duration = handle.Duration;
// モーション全体の長さ
var totalDuration = handle.TotalDuration;
// 遅延時間
var delay = handle.Delay;
// ループ回数
var loops = handle.Loops;
// 完了したループの回数
var complatedLoops = handle.ComplatedLoops;
また、モーションが再生中かどうかを取得するにはIsPlaying()を利用します。これはIsActive()と似ていますが、IsActive()がモーションが破棄されるまで常にtrueを返すのに対し、こちらはPreserve()を呼び出した後にモーションが完了するとfalseになります。
if (handle.IsPlaying())
{
    DoSomething();
}
GameObjectにキャンセル処理を紐づける
AddTo()を使用してGameObjectが破棄された際に自動でモーションをキャンセルさせることができます。
LMotion.Create(0f, 10f, 2f)
    .Bind(() => Debug.Log(x))
    .AddTo(this.gameObject);
複数のMotionHandleを一括管理する
複数のMotionHandleをまとめるためのクラスとしてCompositeMotionHandleクラスが用意されています。AddTo()でこれにMotionHandleを紐付けることも可能です。
var handles = new CompositeMotionHandle();
LMotion.Create(0f, 10f, 2f)
    .Bind(() => Debug.Log(x))
    .AddTo(handles);