既読スキップ時の画像消去のラグについて

30 views
Skip to first unread message

MM

unread,
Feb 1, 2025, 9:24:10 AMFeb 1
to 宴ユーザーグループ
たびたびの質問失礼いたします。
また躓いた箇所が出てきましたので、ご助言いただけましたら幸いです。

宴のバージョン4.1.5
unityのバージョン 6(6000.0.34f1)

現在、キャラクターの表示をのっぺらぼうの土台と、顔パーツのみに分けて表示しております。
表情変化の際は、土台は表示したままで顔パーツのみを変更する形です。
orderで土台を1、顔パーツを2として土台の上に顔パーツ表示されるよう設定しています。

通常速度でのゲーム進行では顔土台、パーツが同時に表示・消去されるように見えますが、既読スキップで文章進行が早くなる際、それぞれの画像の消去あるいは変更にタイムラグが起きているのか、顔土台or顔パーツのみが残っているように見えてしまう状況です。
一瞬でも顔の部品だけ表示されるのは悪目立ちするため、できれば既読スキップ時でも同時に消去されてほしいと考えておりますが、何かいい方法はありますでしょうか?

ご助言いただけましたら助かります。
よろしくお願いいたします。


MM

unread,
Feb 1, 2025, 9:46:33 AMFeb 1
to 宴ユーザーグループ
補足です

特に表情変化が続く(=一人のキャラクターの顔パーツのみ変更が続く)場面の既読スキップでこの状況が多発します。
画像消去というよりは、画像変更時にラグが起きているのかもしれません。
なお、表情パーツの画像変更の際のフェード時間は0.3を指定しています。
0指定なども試しましたが、同じように既読スキップ時には表情パーツのみが表示されているような状態です。

2025年2月1日土曜日 23:24:10 UTC+9 MM:

マッドネスラボ

unread,
Feb 1, 2025, 7:15:51 PMFeb 1
to 宴ユーザーグループ
現状の仕組みですと、別のオブジェクトとして扱っているものを、スキップ時にも厳密に同時にフェードさせるのはちょっと難しいです。
同じオブジェクトとしてパーツ単位で切り替えをするなら、アバターを使うという手段があります。(ただし、こちらはパーツ単位で動かしたりといったことはできません)
https://madnesslabo.net/utage/?page_id=8860

アバターを使えない場合…
スキップ時のフェードでラグがでるのは、おそらくはフェードの時間指定が異なっているために発生します。
フェードには次の2種類があります。
・フェードイン(透明表示→半透明表示→通常表示)
・フェードアウト(透明表示→半透明表示→通常表示)

消えるほうはフェードアウトで、フェードイン中であってもフェードアウトが発生したらフェードインはキャンセルされて、フェードアウトして消えるようになっているかと思います。
ですが、すでにフェードアウト中のオブジェクトは、新たな時間指定でフェードアウトすることはありません。

フェードアウトが発生するのは、主にCharacterOffやSpriteOffなどの非表示系のコマンドなのですが、
もうひとつ、キャラクター表示やSpriteなどの表示コマンドを使う場合に、すでに表示済みのものがあって、同一レイヤー上にパターン等を切り替えて表示する場合があります。
パターン切り替えの場合、「旧パターンをフェードアウトしつつ、新パターンをフェードインする」というクロスフェードというものを行います。
この際の、旧パターンのフェードアウトが続いてる状態で、スキップの高速フェードアウトのほうが先に終わってしまうと、旧パターンのほうが残り続けるということが起きる可能性があります

さらに厳密な話として、クロスフェードは実は内部でかなり複雑なことをしています。
基本的には「同じ大きさのテクスチャ同士のクロスエフェード」であれば、オブジェクトとしては同一のまま通常のフェードをせずにクロスフェード専用の処理をするということをしているので
切り替えるテクスチャの大きさ同じであれば、クロスフェードに起因するラグは起きないと思います。
表示するグラフィックオブジェクトのFileTypeにもよるのですが、同じプレハブ同士のアニメーションパターン変更や、アバターのパターン変更でもクロスフェード起因のラグはおそらく起きないと思います。

ただ、これらの対策をしても、フェードアウト中にスキップが開始された場合
すでにフェードアウト中のものはそのまま通常速度でのフェードアウト処理をするので、スキップによる高速なフェードアウトに追い抜かれてラグがでてしまうことがあります。
これを防ぐには、スキップ処理を「Unity全体の時間経過速度を早回しする」ということをすれば解決するのですが、影響範囲が広すぎるので採用してないです。(ゲームの会話シーンなどで使っていると、勝手にゲーム全体が早回しになってしまうので)

長くなりましたので、まとめです。
・可能であればアバターを使う
・アバターを使えない場合、
 ・フェード時間の指定を(非表示系だけではなく表示の開始系のコマンドも)全て統一する
 ・パターン変更は同じ大きさのテクスチャにすれば若干改善する可能性がある
 ・フェードアウト中にスキップが開始された場合、ラグを完全に解決するのはおそらく不可能



2025年2月1日土曜日 23:46:33 UTC+9 MM:

マッドネスラボ

unread,
Feb 1, 2025, 9:26:19 PMFeb 1
to 宴ユーザーグループ
すみません。誤記の訂正です

・フェードイン(透明表示→半透明表示→通常表示)
・フェードアウト(透明表示→半透明表示→通常表示)

・フェードイン(非表示→半透明表示→通常表示)
・フェードアウト( 通常表示  →半透明表示→ 非表示)


2025年2月2日日曜日 9:15:51 UTC+9 マッドネスラボ:

MM

unread,
Feb 4, 2025, 2:51:44 AMFeb 4
to 宴ユーザーグループ
いつも丁寧なご回答、本当にありがとうございます。
ご回答を拝見して、フェード時間を統一させてみたところ表示非表示のラグが気にならないようになりました!
ラグが悪目立ちしていたので、助かりました・・・!
解説いただいたことを頭に入れて、今後フェードのラグについて注意していきたいと思います。
ありがとうございました!


2025年2月2日日曜日 11:26:19 UTC+9 マッドネスラボ:
Reply all
Reply to author
Forward
0 new messages