テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】新・Timelineで字幕を作る

以前の方法が古くなっているので、新しくTimelineで字幕を作ってみます。

 

TimelineでTextの内容をコントロールする

最初はTimelineでTextの内容をコントロールするだけの簡単なモノを作ってみます。
DefaultPlayableのTimelinePlayableWizardで設定するだけで簡単に実現できます。

  • Standard Blend Playableにチェック
  • Track Binding TypeはText
  • Standard Blend Playable Propertiesにtextを追加

f:id:tsubaki_t1:20180826155108j:plain

f:id:tsubaki_t1:20180826155600j:plain

これでTimelineからTextコンポーネントの中身を更新出来るようになりました。

  1. TimelineのAddボタンから新しく追加したSubtitle Trackを指定
  2. ClipにAdd Subtitle Clipを指定
  3. ClipのTextに字幕の文字を指定

f:id:tsubaki_t1:20180826160122g:plain

 

動作を少し調整

このままでも良いのですが、幾つか気になる点があります。

  • Clip同士がブレンド出来るようになっているが、テキストのブレンドは不要
  • 現在のClipを取得するため、全てのClipを舐める仕組みになっている
  • 毎フレーム初期化チェックが入る

これらを直してみます。
修正する場合には、コードの役割を知っておくと色々と把握しやすいです。

○○○Track

トラックのアセット情報

○○○MixerBehaviour クリップ全体を取得して制御する処理
○○○Behaviourからパラメーターを取得して処理を行う
○○○Clip クリップのアセット情報
○○○Behaviour クリップの動作(及びパラメーター)
クリップ自身に処理を行わせる。
Behaviourで処理する場合、基本的にClipの隙間を空けないように配置する

 

Clipのブレンドを止める

まずはClipのブレンドを止めます。
TrackClipのClipCapsをNoneに変更すると、クリップ間のブレンドが出来なくなります。

f:id:tsubaki_t1:20180826161940j:plain

後はブレンドを止めたので、そこも修正します。
DefaultPlayableから生成するコードはMixer経由で指定した対象の内容を更新するので、SubtitleMixerBehaviourのProcessFrameを更新していきます。

f:id:tsubaki_t1:20180826163026j:plain

ウェイトは0かそれ以外で区分してしまって良いので非常にシンプルに。ブレンドする部分も丸っとスキップできます。

f:id:tsubaki_t1:20180826163440p:plain

 

Clipからの変更を抑える

現状Clipの数が増えれば増えるほど負荷が少しずつ上っていくので、目標が見つかったら停止するコードも追加しておきます。
正直膨大な量にならない限りそこまで差は無いと思いますが、一応。

f:id:tsubaki_t1:20180826164755j:plain

要するに対象が見つかったらbreakしてるだけです。もう少し要素を減らしたいならすでに通ったウェイトは探索対象から外すようにするのが良いかもしれませんが、これは編集が色々と面倒ですし、そもそもココが問題になるとは思えないので放置で。

 

文字の入力は一覧で行いたい

現状、文字の指定はTimelineでclip毎に行っていますが、これだとローカライズやクリップ数が多い場合は割と面倒くさい感じになります。
なので、定義ファイルを用意して上から順番にテキストを抽出して表示という感じに直してみます。

 

まずトラックの参照先に複数の項目を指定できないので、Textと文字情報を参照するコンポーネントを参照するようにします。
参照先の切替はTrackBindingType属性を変更します。

f:id:tsubaki_t1:20180826170535j:plain

これでMixerBehaviourのProcessFrameで取得する対象が変わります。

f:id:tsubaki_t1:20180826170638j:plain

 

後はTimelineが勝手にパラメータを書き換えてしまうのを防止するために、GatherPropertiesを設定しておきます。
保護している項目は色が青くなり、Timeline再生終了時に元(Timeline再生時)の値に戻します。

f:id:tsubaki_t1:20180826171146j:plain

f:id:tsubaki_t1:20180826171300j:plain

f:id:tsubaki_t1:20180826172059g:plain

この文章データはScriptedImporter等で作るのが良いんじゃないかなと思います。もしくはExcelで作るとか。

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp

 

コード

gist.github.com

関連

古い記事

tsubakit1.hateblo.jp

それ以前にDefaultPlayableのサンプルの一つにTextSwitcherがあります。

tsubakit1.hateblo.jp