設定と制御
このページでは、トゥイーンを作成した後の制御、設定、およびクエリの方法について説明します。
制御メソッド
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
設定用メソッドは、メソッドチェーンのためにハンドルを返します。ほとんどの設定(OnComplete、SetLoops、SetDelay、SetUpdate、From、SetSpeedBased)は、Tween作成直後に適用してください。Tweenの再生が開始された後(現在のフレーム以降)に適用された設定は、反映されない場合があります。ただし、SetDuration、SetEase、および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!");
}
- callback: コールバックを受け取るUdonBehaviour(
thisを渡します)。 - eventName: 呼び出すカスタムイベントの名前。必ずpublicであること。
OnRewind
Tweenが開始位置まで巻き戻された(逆再生中に位置0に到達した)ときに発生するコールバックを設定します。メソッドチェーンのためにハンドルを返します。ターゲットとなるコールバックメソッドは、必ず public である必要があります。
audioSource.TweenVolume(1f, 2f, VRCTweenEase.InSine)
.OnRewind(this, nameof(OnFadeComplete));
public void OnFadeComplete()
{
Debug.Log("Backwards playback reached start!");
}
- callback: コールバックを受け取るUdonBehaviour(
thisを渡します)。 - eventName: 呼び出すカスタムイベントの名前。必ずpublicであること。
OnRewindは、逆再生が位置0に到達したときのみ発生します。Restart()では発生しません。
SetLoops
Tweenをループさせる回数を設定します。メソッドチェーンのためにハンドルを返します。
tweenHandle.SetLoops(5, VRCTweenLoopType.Restart);
- loops: ループ回数。無限ループにする場合は
-1を使用してください。 - loopType: ループの動作:
VRCTweenLoopType.Restart(0): 最初から再スタートします。VRCTweenLoopType.Yoyo(1): 順再生と逆再生を交互に行います。VRCTweenLoopType.Incremental(2): 前回の終了値に今回の分を加算します。
SetDelay
Tween開始までの遅延時間を設定します。メソッドチェーンのためにハンドルを返します。負の値、NaN、Infinityは無視されます。入力バリデーションを参照してください。
tweenHandle.SetDelay(1.5f);
- delay: 遅延時間(秒)。
SetUpdate
Tweenの更新タイプを設定します。メソッドチェーンのためにハンドルを返します。
tweenHandle.SetUpdate(VRCTweenUpdateType.LateUpdate);
- updateType: Tweenをいつ更新するか:
VRCTweenUpdateType.Update(0): Update中。VRCTweenUpdateType.LateUpdate(1): LateUpdate中。VRCTweenUpdateType.FixedUpdate(2): FixedUpdate中。VRCTweenUpdateType.PostLateUpdate(3): すべてのLateUpdate呼び出し後。カメラ、IK、その他の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();
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);
}
- easeType:
VRCTweenEase値。 - curve: Unityの
AnimationCurve。インスペクター上で編集して、イージングを視覚的に調整できます。
SetDuration
Tweenの時間を秒単位で変更します。メソッドチェーンのためにハンドルを返します。アクティブなTweenに対しても呼び出し可能です。負の値、NaN、Infinityは無視されます。入力バリデーションを参照してください。
tweenHandle.SetDuration(3f);
- duration: 新しい時間(秒)。
ChangeEndValue
Tweenのターゲット値を変更します。メソッドチェーン用のハンドルを返します。アクティブなTweenに対して呼び出すことができます。安全でない値(NaN、Infinity、または極端な大きさの値)は無視されます。詳細はInput validationを参照してください。
snapStartValue が true の場合、開始値はTweenの現在の値にスナップされます。これはTweenを再利用する際に、元の開始位置に戻るのではなく、オブジェクトの現在の位置からアニメーションを開始させたい場合に便利です。
tweenHandle.ChangeEndValue(new Vector3(10, 0, 0), true);
- newEndValue: 新しいターゲット値。Tweenの型と一致している必要があります(位置/回転/スケールの場合は
Vector3、フェードの場合はfloat、色のTweenの場合はColor、RectTransformのTweenの場合はVector2)。 - snapStartValue:
trueの場合、開始値が現在の値に更新されます。
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
}
Flip()は方向を切り替えますが、再生は開始しません。Tweenが一時停止している場合は、別途Play()を呼び出してください。PlayBackwards()およびPlayForwards()は、どちらも方向の設定と再生の開始を同時に行います。- 逆方向に開始位置まで再生されたTweenは、自動的に削除(kill)されません。再度方向を反転できるように、Tweenは生存し続けます。必要に応じて
OnDestroyで手動で削除してください。 OnRewindは、逆再生が位置 0 に到達したときにのみ発生します。Restart()の際には発生しません。
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 |
バウンス - 両方向で跳ねるような動き。 |
さまざまなイージングタイプを試して、アニメーションに最適な感覚を見つけてください。VRCTweenEase.OutQuadはUIに適しており、VRCTweenEase.OutElasticは遊び心のあるバウンスを追加し、VRCTweenEase.InOutSineは滑らかで自然な動きを作成します。
最終更新: