VRChat 非公式日本語ドキュメント

設定と制御

このページでは、トゥイーンを作成した後の制御、設定、およびクエリの方法について説明します。

制御メソッド

VRCTweenHandle のインスタンスメソッドを使用してトゥイーンを制御します。

メソッド 説明
tweenHandle.Play() 一時停止中のトゥイーンを再開します。
tweenHandle.Pause() 再生中のトゥイーンを一時停止します。メソッドチェーン用にハンドルを返します。
tweenHandle.Kill() トゥイーンを停止し、破棄します。
tweenHandle.Complete() トゥイーンを即座に完了させ、終了値までジャンプします。
tweenHandle.Restart() トゥイーンを最初から再開します。
tweenHandle.Flip() 再生方向を反転させます。一時停止中の場合は再生を開始しません。
tweenHandle.PlayBackwards() 再生方向を逆向き(Backwards)に設定し、再生します。
tweenHandle.PlayForwards() 再生方向を順向き(Forwards)に設定し、再生します。
tweenHandle.Goto(float to, bool andPlay) 指定した秒数の位置へシークします。andPlay が true の場合はシーク後に再生し、false の場合は一時停止します。ネットワーク時刻とトゥイーンを同期させる際に便利です。
VRCTween.KillAll() 全てのアクティブなトゥイーンを終了します。
gameObject.KillAllTweens() 指定した GameObject 上の全てのトゥイーンを終了します。

クエリプロパティ

VRCTweenHandle のプロパティを使用して、トゥイーンの状態をクエリします。

プロパティ 説明
tweenHandle.IsValid bool ハンドルがトゥイーンを参照している場合に True になります(default ハンドルの場合は false)。
tweenHandle.IsPlaying bool トゥイーンが現在再生中の場合に True になります。
tweenHandle.IsActive bool トゥイーンが存在し、かつ破棄(killed)されていない場合に True になります。
tweenHandle.Elapsed float 経過時間(秒)。
tweenHandle.Duration float 合計時間(秒)。
tweenHandle.IsBackwards bool トゥイーンが現在逆再生中の場合に True になります。

Tween Settings

設定用メソッドは、メソッドチェーンのためにハンドルを返します。ほとんどの設定(OnCompleteSetLoopsSetDelaySetUpdateFromSetSpeedBased)は、Tween作成直後に適用してください。Tweenの再生が開始された後(現在のフレーム以降)に適用された設定は、反映されない場合があります。ただし、SetDurationSetEase、およびChangeEndValueは、アクティブなTweenに対していつでも呼び出すことができます。

OnComplete

Tween完了時に発生するコールバックを設定します。メソッドチェーンのためにハンドルを返します。ターゲットとなるコールバックメソッドは、必ず public である必要があります。

// Use custom event names for different tweens.
door.TweenPosition(openPosition, 1f, VRCTweenEase.OutQuad)
    .OnComplete(this, nameof(OnDoorOpened));

window.TweenScale(Vector3.zero, 2f, VRCTweenEase.InQuad)
    .OnComplete(this, nameof(OnWindowClosed));

public void OnDoorOpened()
{
    Debug.Log("Door opened!");
}

public void OnWindowClosed()
{
    Debug.Log("Window closed!");
}

OnRewind

Tweenが開始位置まで巻き戻された(逆再生中に位置0に到達した)ときに発生するコールバックを設定します。メソッドチェーンのためにハンドルを返します。ターゲットとなるコールバックメソッドは、必ず public である必要があります。

audioSource.TweenVolume(1f, 2f, VRCTweenEase.InSine)
    .OnRewind(this, nameof(OnFadeComplete));

public void OnFadeComplete()
{
    Debug.Log("Backwards playback reached start!");
}
note

OnRewindは、逆再生が位置0に到達したときのみ発生します。Restart()では発生しません。

SetLoops

Tweenをループさせる回数を設定します。メソッドチェーンのためにハンドルを返します。

tweenHandle.SetLoops(5, VRCTweenLoopType.Restart);

SetDelay

Tween開始までの遅延時間を設定します。メソッドチェーンのためにハンドルを返します。負の値、NaN、Infinityは無視されます。入力バリデーションを参照してください。

tweenHandle.SetDelay(1.5f);

SetUpdate

Tweenの更新タイプを設定します。メソッドチェーンのためにハンドルを返します。

tweenHandle.SetUpdate(VRCTweenUpdateType.LateUpdate);

From

Tweenを反転させ、ターゲット値から開始してオブジェクトの現在値までアニメーションさせます。オブジェクトを配置された位置へとアニメーションさせる「〜から現れる」演出に便利です。非仮想Tween(transform、UI、spriteなど)でのみ動作します。作成直後に呼び出す必要があります。メソッドチェーンのためにハンドルを返します。

public GameObject notification;

void Start()
{
    // Object is at its final position in the scene.
    // This tween starts it at (0, 10, 0) and animates TO the current position.
    notification.TweenPosition(new Vector3(0, 10, 0), 1f, VRCTweenEase.OutBounce)
        .From();
}

SetSpeedBased

Tweenを速度ベースに設定します。これを有効にすると、durationパラメータは秒数ではなく 1秒あたりの単位数 になります。距離に関わらず一定の移動速度を維持したい場合に便利です。メソッドチェーンのためにハンドルを返します。

// Move at 5 units per second, regardless of distance
gameObject.TweenPosition(targetPos, 5f, VRCTweenEase.Linear)
    .SetSpeedBased();

// Walk along a path at 3 units per second
gameObject.TweenPath(waypoints, 3f, VRCTweenPathType.CatmullRom, false, 10, VRCTweenEase.Linear)
    .SetSpeedBased();
note

SetSpeedBasedは、Tween作成直後に呼び出す必要があります。Tweenの再生が開始された後に適用しても効果はありません。

SetEase

Tweenのイージングを上書きします。VRCTweenEaseプリセット、またはカスタムのAnimationCurveを渡すことができます。カーブを使用する場合、時間軸(0〜1)がTweenの進行状況に、値軸が補間係数にマップされます。メソッドチェーンのためにハンドルを返します。アクティブなTweenに対しても呼び出し可能です。

// Preset ease
tweenHandle.SetEase(VRCTweenEase.OutBounce);

// Custom curve
public AnimationCurve customEase;

void Start()
{
    gameObject.TweenPosition(new Vector3(0, 5, 0), 2f, VRCTweenEase.Linear)
        .SetEase(customEase);
}

SetDuration

Tweenの時間を秒単位で変更します。メソッドチェーンのためにハンドルを返します。アクティブなTweenに対しても呼び出し可能です。負の値、NaN、Infinityは無視されます。入力バリデーションを参照してください。

tweenHandle.SetDuration(3f);

ChangeEndValue

Tweenのターゲット値を変更します。メソッドチェーン用のハンドルを返します。アクティブなTweenに対して呼び出すことができます。安全でない値(NaN、Infinity、または極端な大きさの値)は無視されます。詳細はInput validationを参照してください。

snapStartValuetrue の場合、開始値はTweenの現在の値にスナップされます。これはTweenを再利用する際に、元の開始位置に戻るのではなく、オブジェクトの現在の位置からアニメーションを開始させたい場合に便利です。

tweenHandle.ChangeEndValue(new Vector3(10, 0, 0), true);
note

ChangeEndValue は、transform、UI、sprite、audio、および仮想的なfloat/intのTweenで使用できます。仮想的なColor/Vector3のTween、renderer (MaterialPropertyBlock) のTween、lightのTween、またはパスTweenではサポートされていません。

Tweenの再利用

頻繁にリダイレクトされるTween(毎フレーム、あるいは素早い入力に応答する場合など)では、ハンドルを再利用することでフレームごとのアロケーションを回避できます。インタラクションによってトリガーされる単発のアニメーションについては、新しいTweenを作成する方がシンプルであり、適切に動作します。DOTweenは内部でプールを行っているため、オーバーヘッドは最小限です。

VRCTweenHandle _moveHandle;

void Start()
{
    // Create the tween once with infinite loops so it stays alive after completing.
    _moveHandle = gameObject.TweenPosition(Vector3.zero, 1f, VRCTweenEase.OutQuad)
        .SetLoops(-1, VRCTweenLoopType.Restart)
        .Pause();
}

public void MoveTo(Vector3 target, float duration)
{
    // Reconfigure and restart without allocating.
    _moveHandle.ChangeEndValue(target, true)
        .SetDuration(duration)
        .SetEase(VRCTweenEase.OutCubic);
    _moveHandle.Restart();
}

方向の制御

Tweenの再生方向は、アニメーションの途中で反転させることができます。反対方向に新しいTweenを作成して停止させるのとは異なり、この方法ではイージングカーブが維持されます。イージングを再開することなく、アニメーションの方向をスムーズに変更できます。

VRCTweenHandle _fadeHandle;

void Start()
{
    _fadeHandle = audioSource.TweenVolume(1f, 2f, VRCTweenEase.InSine)
        .OnRewind(this, nameof(OnFadeOut))
        .Pause();
}

public void OnZoneEnter()
{
    _fadeHandle.PlayForwards();
}

public void OnZoneExit()
{
    _fadeHandle.PlayBackwards();
}

public void OnFadeOut()
{
    // Backwards playback reached the start
}

Gotoによるシーク

Gotoを使用すると、Tweenを指定した時間位置までジャンプさせることができます。これは、長時間実行されるTweenをネットワーク時間と同期させ、途中から参加したプレイヤーに正しい状態を表示させる場合に特に有効です。

[UdonSynced] float _tweenStartTime;
VRCTweenHandle _syncedTween;

void Start()
{
    _syncedTween = gameObject.TweenPosition(targetPos, 10f, VRCTweenEase.Linear)
        .SetLoops(-1, VRCTweenLoopType.Restart);
}

public override void OnDeserialization()
{
    float elapsed = (float)(Networking.GetServerTimeInSeconds() - _tweenStartTime);
    _syncedTween.Goto(elapsed, true);
}

andPlayパラメーターは、シーク後にTweenを再生するか一時停止するかを制御します。新しい位置から再生を続ける場合は true を、その位置で一時停止させる場合は false を渡してください。

パスの種類

パスの種類 説明
VRCTweenPathType.Linear ウェイポイント間を直線で結びます。
VRCTweenPathType.CatmullRom Catmull-Romスプラインを使用して、滑らかな曲線パスを作成します。

イージングタイプ

イージングタイプ 説明
VRCTweenEase.Linear 一定の速度。
VRCTweenEase.InSine 正弦波 - 滑らかな加速。
VRCTweenEase.OutSine 正弦波 - 滑らかな減速。
VRCTweenEase.InOutSine 正弦波 - 両方向で滑らか。
VRCTweenEase.InQuad 2次関数 - 加速。
VRCTweenEase.OutQuad 2次関数 - 減速。
VRCTweenEase.InOutQuad 2次関数 - 加速して減速。
VRCTweenEase.InCubic 3次関数 - 加速(より強調)。
VRCTweenEase.OutCubic 3次関数 - 減速(より強調)。
VRCTweenEase.InOutCubic 3次関数 - 加速して減速(より強調)。
VRCTweenEase.InQuart 4次関数 - 強力な加速。
VRCTweenEase.OutQuart 4次関数 - 強力な減速。
VRCTweenEase.InOutQuart 4次関数 - 強力な加速と減速。
VRCTweenEase.InQuint 5次関数 - 非常に強力な加速。
VRCTweenEase.OutQuint 5次関数 - 非常に強力な減速。
VRCTweenEase.InOutQuint 5次関数 - 非常に強力な加速と減速。
VRCTweenEase.InExpo 指数関数 - 爆発的な加速。
VRCTweenEase.OutExpo 指数関数 - 爆発的な減速。
VRCTweenEase.InOutExpo 指数関数 - 爆発的な加速と減速。
VRCTweenEase.InCirc 円関数 - 滑らかで丸みのある加速。
VRCTweenEase.OutCirc 円関数 - 滑らかで丸みのある減速。
VRCTweenEase.InOutCirc 円関数 - 両方向で滑らかで丸みのある動き。
VRCTweenEase.InElastic 弾性 - バネのような開始。
VRCTweenEase.OutElastic 弾性 - バネのような終了。
VRCTweenEase.InOutElastic 弾性 - 両方向でバネのような動き。
VRCTweenEase.InBack バック - 開始時にわずかなオーバーシュート。
VRCTweenEase.OutBack バック - 終了時にわずかなオーバーシュート。
VRCTweenEase.InOutBack バック - 両方向でわずかなオーバーシュート。
VRCTweenEase.InBounce バウンス - 跳ねるような開始。
VRCTweenEase.OutBounce バウンス - 跳ねるような終了。
VRCTweenEase.InOutBounce バウンス - 両方向で跳ねるような動き。
tip

さまざまなイージングタイプを試して、アニメーションに最適な感覚を見つけてください。VRCTweenEase.OutQuadはUIに適しており、VRCTweenEase.OutElasticは遊び心のあるバウンスを追加し、VRCTweenEase.InOutSineは滑らかで自然な動きを作成します。

最終更新: