現状の仕組みですと、別のオブジェクトとして扱っているものを、スキップ時にも厳密に同時にフェードさせるのはちょっと難しいです。
同じオブジェクトとしてパーツ単位で切り替えをするなら、アバターを使うという手段があります。(ただし、こちらはパーツ単位で動かしたりといったことはできません)
https://madnesslabo.net/utage/?page_id=8860
アバターを使えない場合…
スキップ時のフェードでラグがでるのは、おそらくはフェードの時間指定が異なっているために発生します。
フェードには次の2種類があります。
・フェードイン(透明表示→半透明表示→通常表示)
・フェードアウト(透明表示→半透明表示→通常表示)
消えるほうはフェードアウトで、フェードイン中であってもフェードアウトが発生したらフェードインはキャンセルされて、フェードアウトして消えるようになっているかと思います。
ですが、すでにフェードアウト中のオブジェクトは、新たな時間指定でフェードアウトすることはありません。
フェードアウトが発生するのは、主にCharacterOffやSpriteOffなどの非表示系のコマンドなのですが、
もうひとつ、キャラクター表示やSpriteなどの表示コマンドを使う場合に、すでに表示済みのものがあって、同一レイヤー上にパターン等を切り替えて表示する場合があります。
パターン切り替えの場合、「旧パターンをフェードアウトしつつ、新パターンをフェードインする」というクロスフェードというものを行います。
この際の、旧パターンのフェードアウトが続いてる状態で、スキップの高速フェードアウトのほうが先に終わってしまうと、旧パターンのほうが残り続けるということが起きる可能性があります。
さらに厳密な話として、クロスフェードは実は内部でかなり複雑なことをしています。
基本的には「同じ大きさのテクスチャ同士のクロスエフェード」であれば、オブジェクトとしては同一のまま通常のフェードをせずにクロスフェード専用の処理をするということをしているので
切り替えるテクスチャの大きさ同じであれば、クロスフェードに起因するラグは起きないと思います。
表示するグラフィックオブジェクトのFileTypeにもよるのですが、同じプレハブ同士のアニメーションパターン変更や、アバターのパターン変更でもクロスフェード起因のラグはおそらく起きないと思います。
ただ、これらの対策をしても、フェードアウト中にスキップが開始された場合
すでにフェードアウト中のものはそのまま通常速度でのフェードアウト処理をするので、スキップによる高速なフェードアウトに追い抜かれてラグがでてしまうことがあります。
これを防ぐには、スキップ処理を「Unity全体の時間経過速度を早回しする」ということをすれば解決するのですが、影響範囲が広すぎるので採用してないです。(ゲームの会話シーンなどで使っていると、勝手にゲーム全体が早回しになってしまうので)
長くなりましたので、まとめです。
・可能であればアバターを使う
・アバターを使えない場合、
・フェード時間の指定を(非表示系だけではなく表示の開始系のコマンドも)全て統一する
・パターン変更は同じ大きさのテクスチャにすれば若干改善する可能性がある
・フェードアウト中にスキップが開始された場合、ラグを完全に解決するのはおそらく不可能
2025年2月1日土曜日 23:46:33 UTC+9 MM: