以前の方法が古くなっているので、新しくTimelineで字幕を作ってみます。
TimelineでTextの内容をコントロールする
最初はTimelineでTextの内容をコントロールするだけの簡単なモノを作ってみます。
DefaultPlayableのTimelinePlayableWizardで設定するだけで簡単に実現できます。
- Standard Blend Playableにチェック
- Track Binding TypeはText
- Standard Blend Playable Propertiesにtextを追加
これでTimelineからTextコンポーネントの中身を更新出来るようになりました。
- TimelineのAddボタンから新しく追加したSubtitle Trackを指定
- ClipにAdd Subtitle Clipを指定
- ClipのTextに字幕の文字を指定
動作を少し調整
このままでも良いのですが、幾つか気になる点があります。
これらを直してみます。
修正する場合には、コードの役割を知っておくと色々と把握しやすいです。
Clipのブレンドを止める
まずはClipのブレンドを止めます。
TrackClipのClipCapsをNoneに変更すると、クリップ間のブレンドが出来なくなります。
後はブレンドを止めたので、そこも修正します。
DefaultPlayableから生成するコードはMixer経由で指定した対象の内容を更新するので、SubtitleMixerBehaviourのProcessFrameを更新していきます。
ウェイトは0かそれ以外で区分してしまって良いので非常にシンプルに。ブレンドする部分も丸っとスキップできます。
Clipからの変更を抑える
現状Clipの数が増えれば増えるほど負荷が少しずつ上っていくので、目標が見つかったら停止するコードも追加しておきます。
正直膨大な量にならない限りそこまで差は無いと思いますが、一応。
要するに対象が見つかったらbreakしてるだけです。もう少し要素を減らしたいならすでに通ったウェイトは探索対象から外すようにするのが良いかもしれませんが、これは編集が色々と面倒ですし、そもそもココが問題になるとは思えないので放置で。
文字の入力は一覧で行いたい
現状、文字の指定はTimelineでclip毎に行っていますが、これだとローカライズやクリップ数が多い場合は割と面倒くさい感じになります。
なので、定義ファイルを用意して上から順番にテキストを抽出して表示という感じに直してみます。
まずトラックの参照先に複数の項目を指定できないので、Textと文字情報を参照するコンポーネントを参照するようにします。
参照先の切替はTrackBindingType属性を変更します。
これでMixerBehaviourのProcessFrameで取得する対象が変わります。
後はTimelineが勝手にパラメータを書き換えてしまうのを防止するために、GatherPropertiesを設定しておきます。
保護している項目は色が青くなり、Timeline再生終了時に元(Timeline再生時)の値に戻します。
この文章データはScriptedImporter等で作るのが良いんじゃないかなと思います。もしくはExcelで作るとか。
コード
関連
古い記事
それ以前にDefaultPlayableのサンプルの一つにTextSwitcherがあります。