・E-mote宴マニュアル・
『宴』とは
『宴』とは、Unity用のビジュアルノベル作成ツールです。
Excelベースのシンプルなシナリオデータで手軽にノベルゲームを作成出来ることが特徴です。
『宴』が標準でサポートしていないオブジェクトをゲーム中のキャラとして取り扱うための拡張機構が存在するので、それを使ってE-moteオブジェクトを『宴』のゲーム内に登場させられるようにします。
対応バージョン
この文書は、『宴3』以降、E-mote Unity TYPE2 SDK 3.9.4以降のバージョンを対象としています。
それ以前のバージョンでは正しく動作しません。
E-moteのセットアップ
SDKのインポート
えもふりの Unity SDK、もしくは商用のE-moteエディタに付属のUnity TYPE2 SDKをインポートします。
ファイル名はいずれも emote_sdk_type2.unitypackage です。このファイルをドラッグ&ドロップでUnityにインポートします。
えもふりSDKと商用のE-mote SDKでは暗号化キーが異なるため、データの相互利用が出来ないことには注意が必要です。
モデルのインポート
えもふり、もしくはE-moteエディタから、E-moteモデルをエクスポートします。
えもふりでのエクスポート
えもふりの場合ファイルメニューから「エクスポートする/Unity向けにエクスポートする」を選択するだけで簡単にエクスポートができます。
商用E-moteエディタでのエクスポート
商用 E-moteエディタの場合は、以下のような設定でエクスポートを行います。
設定のポイントは以下の3点です。
- ターゲットを「COMMON」にする
- テクスチャ形式を「DIRECT_32BPP」にする
- テクスチャ分離を「分離する」にする
また、ファイル名はUnityが認識出来るように「.bytes」と拡張子を付けてください。
Unityへのインポート
エディタからエクスポートしたファイルは、単一のbytesファイルと複数の連番テクスチャファイルから構成されています。
これらのファイルを、UnityのAssetsフォルダ下の任意のフォルダに配置して下さい。(『宴』からはPrefab経由で参照するので、どのフォルダに配置してあっても問題はありません)。
/emote/ と名前のついたフォルダの下に配置すると、エディタスクリプトの効果で自動的にテクスチャが「自動圧縮」「ミップマップなし」「Clamp」の状態に設定されます。
出力プラットフォームごとに細かくテクスチャフォーマットを設定したい場合など、独自のインポートスクリプトを記述することをオススメします。
モデルの作成
以下の手順でE-mote表示用のモデルを作成します。
既存のPrefabを複製する
Assets/EmotePlayer/Prefabs/EmotePlayer-RenderTexture.prefab を、Ctrlキーを押しながらドラッグ&ドロップして複製します。
データファイルを指定する
Prefabを選択して、InspectorウィンドウでEmotePlayerのData Fileに、先ほどエディタからエクスポートした .bytes ファイルを指定します。
アラインメントを足下基準に設定
E-mote Prefab はデフォルトでは、E-moteエディタで設定したキャラプロファイルに基づいてキャラのスケーリングを行います。キャラの身長・足下位置などを適切に設定している場合、キャラのアライメントを「bottom」基準にすることで、複数キャラの縦位置合わせが簡単になります。
(アライメント設定についての詳細は E-mote for Unity SDK マニュアルをご覧ください)。
Unityのメカニムを使ってアニメーションの設定
『宴』ではUnityの「メカニム」と言う仕組みでアニメーションを設定するようになっています。
https://docs.unity3d.com/ja/current/Manual/class-Animator.html
E-moteでは一般的に、エディタで作成した「タイムライン」を、1つの「メインタイムライン」と6つの「差分タイムラインスロット」を組み合わせる形で演出を指定します。
メカニムの仕組みにE-moteのタイムラインをマッピングすることで『宴』でE-moteモデルの演出が指定出来るようになります。
Animatorコンポーネントを追加
プレハブを選択して、AnimatorコンポーネントをAddComponentします。
アニメーションコントローラを作成し、設定する
Projectウィンドウで「Create/Animator Controller」で新規Animator Controllerを作成します。
作成したアニメーションコントローラーをプレハブのAnimatorコンポーネントに設定します。
アニメーションコントローラーをE-moteのタイムラインに合わせて更新
AnimatorのコンテキストメニューからBuild Emopte Timeline Animator Controller を選択すると、設定されているAnimator Controller を、E-moteデータファイル内のタイムラインを呼び出せる形に自動的に設定します。
自動設定された Animator Controller は、以下のように、AnyStateから全てのタイムラインへの遷移が設定されたシンプルなステートマシンとなっています。
ステートへの遷移は同名のタイムラインの再生開始と同義で、遷移時間は意味を持ちません。
メインタイムラインが「Main」、1~6番目の差分タイムラインスロットがそれぞれ「#1」~「#6」と言う名前のレイヤに設定されます。
メインタイムラインは「stop」「喜び00」など直接タイムラインラベルで指定し、差分タイムラインは「#1.stop」「#1.左向き会話」のように、レイヤ名を含めたステートのフルパスで指定します。
E-moteモデルに新しいタイムラインを追加した時は、この操作を明示的に行いAnimator Controller を更新する必要があります。
タイムラインの構成が完全に一致している場合は、複数のE-moteモデルで同一のAnimator Controllerを使い回すことも可能です。
宴のセットアップ
ここからは、『宴』でE-mote拡張をつかうまとめです。
実行には、『宴』と、E-mote SDK、以下に紹介する拡張スクリプトが必要です。
宴本体の購入とインポート
Unityに新規プロジェクトを作成して『宴3』をAssetStoreから購入、インポートします。
宴のE-mote拡張のDLとインポート
『宴』でE-mote拡張を使うには以下のパッケージをDLしてください
パッケージをダブルクリック(またはUnityのプロジェクトウィンドウにドラッグ&ドロップ)すると『宴』のE-mote拡張をインポートできます。
サンプルの実行
『宴』のE-moteサンプルプロジェクトは、E-mote SDKに同梱されているサンプルモデルを参照する形で書かれているため、『宴本体』『E-mote SDK』『宴のE-moteサンプル』の3パッケージをインポートした段階で、サンプルが実行可能な状態が整っています。
UtageForEmote/Sample/UtageForEmote.unity を実行してください。
えもふりSDKの場合は一旦E-moteロゴを表示してからでないとキャラがグレーアウトされるので、以下のように Startup.unity と UtageForEmote.unity の2つのシーンを Scenes In Build に追加した上で、Startup.unity から実行を始めてください。
新規プロジェクトの実行
以下、新規プロジェクトに自作モデルをセットアップする手順を解説します。
『宴』の新規プロジェクトの作成
プロジェクトの作成方法や、基本的な使い方は宴の基本的な流れと同じです。
『宴』のチュートリアルなどを参考にして、新規プロジェクトを作成してください。
プレハブに専用のコンポーネントを追加
E-mote表示用のプレハブを『宴』で表示するためにはUtageForUtage/Scripts/AdvGraphicObjectEmote をAddComponentします。
プレハブの置き場所を変える
プレハブを 作成したプロジェクト名/Resources/プロジェクト名/Texture/Character 以下に置きます。
Texture/Character以下であれば、サブフォルダを作っても構いません。
キャラクターシートを編集
E-moteの表示は、基本的にはプレハブを使った表示になります。
こちらのやり方とほぼ同じです。
唯一、キャラクターシートのFileTypeを「Custom」とする点だけ違います。
シナリオを編集
キャラクター表示のやり方も基本的に2DPrefabと同様の方法になります。
キャラクター表示の際に、Arg2にタイムライン名(メカニムで設定したState名)を記述すると、そのタイムラインを再生します。
口パクに対応する
口パク用のコンポーネントを追加
E-moteには口パク用のコンポーネントがありますが、それと『宴』の処理をつなげる必要があります。
UtageForEmote/Scripts/EmoteLipSnych コンポーネントを AddComponent します。
これにより、E-moteキャラがテキストの再生・もしくはボイスの音量に応じて自動的に口パクしてくれるようになります。(コンポーネントのTypeプロパティを設定することで、テキストのみ、ボイスのみに対応した口パクの設定も出来ます)。
E-mote側の口パク用コンポーネントである EmoteLipSynchControl のパラメータ設定の詳細については、E-mote SDKのマニュアルをご確認ください。
補足
このドキュメントでは、EmotePlayerのPrefabを作成する際に、Player側で一旦レンダーテクスチャにキャラの描画を行う Emote-RenderTexture.prefab をベースに設定を行っています。
レンダーテクスチャを経由せずに直接フレームバッファに描画を行う設定の E-mote-DirectRender.prefab もあるのですが、そちらを使うとキャラ間や宴の他のタイプのオブジェクトとの前後関係の制御が困難になるため、Emote-RenderTexture.prefab を使用しています。
これは、実のところ、Emote-DirectRender.prefab を利用した上で『宴』側のCharacterシートで「テクスチャ書き込み」の設定を使用するのと、ほぼ同じ意味合いを持ちます。
E-mote側の Render Texture Mapperを使うと、E-moteモデルのバウンズ情報を利用してキャラの全身を収める最適なサイズにレンダーテクスチャを自動的にリサイズしてくれるので、『宴』側で「テクスチャ書き込み」の設定を行うよりも設定が楽です。
ですが、モデル単位でのトランジションなどを適用する際には『宴』側での「テクスチャ書き込み」設定が必須になります。その場合は、E-mote-DirectRender.prefab をベースにお使いください。