テラシュールブログ

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

【Unity】Timelineで字幕を表示する

f:id:tsubaki_t1:20170313234004g:plain

TimelineのExperimental Buildが公開されています。

せっかくなので字幕に使ってみました。

 

※Unity 2017b5で実装が大幅に変わった為、動作しません。
 新しい実装に修正中

 

Timelineのスクリプト制御

Timelineエディタの機能の一つにタイムラインエディタからスクリプト制御を行うというモノがあります。

UnityエディタのTimeline機能は、大きく分けて3つのスクリプト制御が出来るみたいです。

f:id:tsubaki_t1:20170313224712j:plain

Track Assetは、Timelineのトラックに登録するPlayable Assetやバインドするオブジェクトを制御する物っぽいです。*1

PlayableAssetはトラック上に配置し、設定した項目をScript Playableに渡す物です。

ScriptPlayableは再生中に呼び出される処理本体です。

 

とりあえず今回はPlayable AssetとScript Playableを使ってみます。

Timelineを用意

まずはタイムラインの処理を登録するPlayableAssetを用意します。ココにタイムラインベースの処理を登録する流れです。

作成したら、Playalbe Directorコンポーネントを適当なオブジェクトに追加して、先程作成したPlayableAssetを登録します。

f:id:tsubaki_t1:20170313234121j:plain

f:id:tsubaki_t1:20170313234532j:plain

スクリプトの用意

次に、スクリプトを用意します。

Timeline Clip C# Scriptを選択して、名前をSubtitlePlayableとかに設定しておきます。

後は、下のコードを作ったスクリプトにコピペ。

f:id:tsubaki_t1:20170313234653j:plain

 

gist.github.com

ウィンドウを開く

次にTimelineのウィンドウを開きます。

その後、Playalbe Directorを選択し、Previewが見えるタイミングでウィンドウをロックします。

こうしないと、ウィンドウを操作するたびにTimelineウィンドウの表示がおかしくなり、非常にストレスフルです。特にスクリプト制御を行う際は、オブジェクトをあっちこっち触るので、必ずロックした方が良い印象です。

f:id:tsubaki_t1:20170313235328j:plain

f:id:tsubaki_t1:20170313235646j:plain

もしオブジェクトの登録が出来ない場合、TimelineEditorがSequence Assetモードになっていると思われます

f:id:tsubaki_t1:20170313235831j:plain

ただ、ロックするとウィンドウが消せなくなる不具合があります。その場合は、一旦Playalbe Directorを選択してロックを解除してから、ウィンドウを閉じます。

タイムラインの設定

タイムラインに字幕を設定します。

まずPlayable Trackでトラックを追加、

追加したトラック内で右クリック→Add Clip→SubtitlePlayableAssetを選択

作られた項目を選択すると、Inspectorに更新したいTextコンポーネントと変更するメッセージを設定する項目が表示されるので、設定。

f:id:tsubaki_t1:20170314000446j:plain

f:id:tsubaki_t1:20170314000529j:plain

f:id:tsubaki_t1:20170314000531j:plain

これでタイムラインに合わせてテキストが更新出来ます。

ExposedReference

今回のTimelineで面倒くさい面白いのが、ExposedReferenceという機能です。

これは実行時にオブジェクトの依存関係を解決する機能みたいです。

f:id:tsubaki_t1:20170314000755j:plain

PlayableAssetはあくまでアセットなので、シーンに対する参照を持ちません。そのため、シーンに既に存在するPlayableDirectorにオブジェクトへの参照を登録しておき、PlayableAsset読込時に解決するという物です。

 

なので、例えばPlayableAssetをResourcesやAssetBundleに格納しておき、特定のイベント発行時(ドアを開いたり宝箱を開くカットシーン)にロードする…といった事も出来そうです。

 

ちなみに現在(Unity 5.6 b6 Timeline用Experimental Build)のメモリ管理周りがかなり雑になっているらしく、Timeline関連のアセットのアンロードや読込等の処理や、アセットの開放漏れでエディタが簡単に強制終了します。

関連

tsubakit1.hateblo.jp

nn-hokuson.hatenablog.com

www.shibuya24.info

*1:マニュアルにも使い方は書いておらず、コレを有効活用してるサンプルも無いので用途不明です。ただPlayableAssetに全部任せると色々と駄目なので、Track先生には活躍して欲しい所。