Table of Contents

モーションの制御

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);