前回は、 Unity の Timeline アセットを作成して、シーンのゲームオブジェクト(例では Text)をタイムラインにクリップとして配置して、表示する時間の範囲を指定する手順を紹介しました。
C# のプログラムではコルーチンや時間を手動で計測して行わなければならない処理を Timeline を使うことで簡単に設定することができました。
前回の記事:Unity Timeline で指定した時間だけテキストを表示する | Compota-Soft-Press

今回は、タイムラインの再生が終了してもテキストが非表示にならない問題の対策として、 Playable Director コンポーネントの Wrap Mode が None の場合のタイムラインの振る舞いと、非表示にならない問題の対処法について紹介します。
※ Unity のバージョンは 2021.3.25f1 Personal <DX11> です。
※表示されている 3D モデルは無料アセット「Old Sea Port」を使用しています。
※ゲームのテキストのフォントには「水面字」を使用しています。
Playable Director の Wrap Mode
前回、テキストを指定した時間が経過してから表示するタイムラインのクリップを配置しました。
しかし、タイムラインの最後まで再生した後、再生位置が最初に戻り停止したにも関わらず、クリップのテキストは非表示にならず表示され続けます。


この理由は、タイムラインのゲームオブジェクトに付加される Playable Director コンポーネントの Wrap Mode の設定が None のためでした。
Wrap Mode では、以下の 3 つの値が選択でき、デフォルトでは None が設定されています。
Wrap Mode
タイムラインインスタンスが再生を終了するときの動作。Wrap Mode は、Timeline エディターウィンドウが Play Range モードにあるときの動作も定義します。以下の Wrap Mode が適用可能です。
Playable Director コンポーネント – Unity マニュアル
- Hold: タイムラインインスタンスを 1 回再生し、再生が中断されるまで最後のフレームを維持します。
- Loop: 再生が中断されるまで、シーケンスを繰り返し再生します。
- None: シーケンスを 1 回再生し、アニメーション化したすべてのプロパティーを再生前の値にリセットします。
WrapMode が None の場合は、
- 再生は1回で終了する。
#再生位置は 0 に戻っているように見えます。 - アニメーションを制御していたゲームオブジェクトの状態は再生前に戻る
ということがわかりました。
今回の Timeline では Play On Awake が有効なため、シーンの再生と同時にタイムラインも再生されます。
この場合、タイムラインの再生前の状態とは、Inspector での設定です。
※タイムラインがシーンの途中で再生される場合は、ゲームオブジェクトも初期状態から変化しているのでリセットされる状態は異なるかもしれません。
テキストのゲームオブジェクトを選択して Inspector ウィンドウで確認すると、Active のチェックボックスは ON になっていて、ゲームオブジェクトが有効な状態です。

シーンの再生と同時に Active のチェックボックスだけが OFF に変更され、表示されなくなりました。

先ほどの None の説明にあるように、1 回タイムラインを再生すると再生前の状態、この場合はテキストゲームオブジェクトの Active のチェックボックスが ON の状態に戻るため、タイムラインの再生後テキストが表示され続けることになりました。
対処法:テキストの Active を OFF にしておく
前述の問題に Wrap Mode を変更しないで対処する場合、テキストの再生前の Active チェックボックスの状態を OFF にしておくことが考えられます。
これにより、タイムラインの再生中だけ一時的に ON になり、再生が終了した後は再生前の状態の OFF に戻り、テキストが指定した時間内だけ表示されるようになります。

テスト
テキストのゲームオブジェクトの Active を OFF にした状態でシーンを再生すると、タイムラインの再生時間がクリップの範囲内のときにだけテキストが表示され、タイムラインの再生が終了した後はテキストは非表示に戻りました。



まとめ
今回は、Unity のタイムラインが終了してもテキストが非表示にならない問題の対策として、 Playable Director コンポーネントの Wrap Mode が None の場合のタイムラインの振る舞いと、対処法について紹介しました。
WrapMode が None の場合は、タイムラインは1回再生すると終了し、制御していたゲームオブジェクトの状態はその再生前の状態に戻ることや、それに対する対処法を確認しました。
参照サイト Thank You!
- Unity のリアルタイム開発プラットフォーム | 3D/2D、VR/AR のエンジン
- Timeline エディターウィンドウ – Unity マニュアル
- Playable Director コンポーネント – Unity マニュアル
- Unityのタイムライン機能を使って字幕まで表示してみた! | SHERPA TIMES
記事一覧 → Compota-Soft-Press
コメント