MRが楽しい

MRやVRについて学習したことを書き残す

Unityでアニメーションファイルを使って字幕の切替とタイミングの指定を行う

本日は Unity の技術調査枠です。
Unityでアニメーションファイルを使って字幕の切替とタイミングの指定を行う方法について記事にします。
f:id:bluebirdofoz:20190830122710j:plain

シーンの作成

初めに元となるサンプルシーンを作成します。
キャラクターとオーディオソースを配置して、字幕用のテキストオブジェクトを作成します。
f:id:bluebirdofoz:20190830122724j:plain

今回、アニメーションで変更するのは表示文字のみとします。
字幕位置や文字サイズ、フォントは予め Text コンポーネントを設定して決定しておきます。
f:id:bluebirdofoz:20190830122736j:plain

字幕変更アニメーションの作成

追加した Text オブジェクトに、字幕変更のアニメーションを設定します。
[Add Component]から Animator コンポーネントを検索してアタッチします。
f:id:bluebirdofoz:20190830122748j:plain

次にアニメーションファイルを作成します。
Text オブジェクトを選択した状態で、メニューから Window -> Animation を選択します。
すると、Animation ウィンドウが開くので、[Create]ボタンをクリックして新規アニメーションファイルを作成します。
f:id:bluebirdofoz:20190830122759j:plain

保存ダイアログが開くので、任意のディレクトリと保存名を指定して[保存]します。
f:id:bluebirdofoz:20190830122809j:plain

これでアニメーションに自動遷移する AnimationController とアニメーションファイルが生成されます。
AnimationController は選択したオブジェクトの Animator コンポーネントに自動で設定されています。
このため、後はアニメーションファイルを編集するだけで、変更がオブジェクトに反映されます。
f:id:bluebirdofoz:20190830122822j:plain

デフォルトだとアニメーションファイルの1秒当たりのサンプリング数は 60 になっています。
字幕のタイミングを指定するにはサンプリングが多すぎるのでサンプリング数を 10 に変更しました。
これで 0.1 秒単位での字幕切替のタイミング指定が行えます。
f:id:bluebirdofoz:20190830122833j:plain

では字幕の表示タイミングを指定していきます。
例えば、1秒目のタイミングで「こんにちは」という字幕を表示してみます。
字幕を切り替えたいタイミングをクリックして選択状態にし、[Add Event]ボタンをクリックします。
f:id:bluebirdofoz:20190830122844j:plain

Inspector ビューに関数の設定が表示されます。
イベントで呼び出す関数を指定するため、[Function]の[(No Function Selected)]をクリックします。
f:id:bluebirdofoz:20190830122852j:plain

プルダウンが開き、指定可能な関数の一覧が表示されます。
Text コンポーネントの set_text 関数を選択します。
f:id:bluebirdofoz:20190830122901j:plain

[Function]に set_text 関数が指定されます。
[Prameters]の[String]に表示したい文字列の「こんにちは」を入力します。
f:id:bluebirdofoz:20190830122912j:plain
これで字幕の文字と表示タイミングを指定できました。

動作確認

Scene 画面に戻り、この状態で[再生]ボタンをクリックしてシーンを再生してみます。
f:id:bluebirdofoz:20190830122922j:plain

1秒目のタイミングで字幕が切り替わりました。成功です。
f:id:bluebirdofoz:20190830122932j:plain

同じように[Add Event]を追加して字幕をどんどん切り替えたり、空文字イベントを起こして字幕を消すといったことができます。
f:id:bluebirdofoz:20190830122942j:plain

また、デフォルトだとアニメーションはループ再生されます。
ループ再生をしたくない場合は、アニメーションファイルの Inspector ビューを開き、[Loop Time]のチェックを無効にします。
f:id:bluebirdofoz:20190830122951j:plain