モーションの制御
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);