キャラクター
キャラクターは、背景 の手前に配置されるシーンエンティティを表すために使用されるアクターです。
キャラクターアクターは、名前、外観、可視性、トランスフォーム(位置、回転、スケール)、および視線方向で定義されます。
キャラクターの動作は、Naninovel -> Configuration -> Characters エディターメニューを使用するか、アクターレコード を使用して構成できます。利用可能なオプションについては、構成ガイド を参照してください。キャラクターのリソースマネージャーには、Naninovel -> Resources -> Characters エディターメニューを使用してアクセスできます。
シナリオスクリプトでは、キャラクターは @char コマンドで制御されます。
; ID「Sora」のキャラクターをデフォルトの外観で表示します。
@char Sora
; 上記と同じですが、外観を「Happy」に設定します。
@char Sora.Happy
; 上記と同じですが、さらにキャラクターをシーンの左端から45%、
; 下端から10%離れた位置に配置し、
; 左を向かせます。
@char Sora.Happy look:left pos:45,10ヒント
数値パラメーターを手作業で調整する代わりに、シーンレコーディング を使用すると、Unityのシーンビューのギズモでアクターとカメラを配置し、対応するNaniScriptコマンドを自動生成できます。
アクターレコード
キャラクターが多く、エディターメニューですべてを割り当てるのが不便な場合は、アクターレコードアセット(Create -> Naninovel -> Actor Record -> Character)を使用してください。これらはマルチ編集をサポートしており、フォルダーでレコードを整理できます。例については、以下のビデオを確認してください。
ポーズ
各キャラクターには、名前付きの状態(ポーズ)を指定できる Poses プロパティがあります。
ポーズ名を @char コマンドで外観として使用すると、コマンドパラメーターを介して個別に指定する代わりに、ポーズで指定された選択済みのパラメーターをすべて一度に適用できます。
; 「Kohaku」に「SuperAngry」ポーズが定義されている場合、
; ポーズで指定された選択済みのパラメーターをすべて適用します。
@char Kohaku.SuperAngry
; 上記と同じですが、3秒かけて「DropFade」トランジションを使用します。
@char Kohaku.SuperAngry via:DropFade time:3なお、ポーズを外観として使用する場合でも、個々のパラメーターをオーバーライドできます。例:
; 「Kohaku」に「SuperAngry」ポーズが定義されている場合、
; ポーズ状態で指定されたすべてのパラメーターを適用しますが、
; コマンドでオーバーライドされている色合いは除きます。
@char Kohaku.SuperAngry tint:#ff45cbキャラクターと背景の構成には、Shared Poses もあります。これらのポーズは、対応するすべてのアクター間で共有されます。共有ポーズの使用例としては、発話中/非発話中のテンプレートの再利用や、カメラを基準とした事前定義のステージの作成などがあります。
アクターごとのポーズと共有ポーズの両方を、専用の pose パラメーターを介して適用することもできます。
@char Kohaku.Happy pose:DownLeft
@char Yuko.Surprise pose:UpCenter
@char Misaki pose:UpRightアクターごとのポーズは共有ポーズよりも優先されます。つまり、アクターのポーズ名が共有ポーズと同じ場合、アクターのポーズが使用されます。これにより、必要に応じて特定のアクターの共有ポーズをオーバーライドできます。
表示名
キャラクター構成で Has Name が有効になっている場合、特定のキャラクターに Display Name を設定できます。設定すると、プリンターの名前ラベルUIには、キャラクターIDの代わりに表示名が表示されます。これにより、IDでは使えないスペースや特殊文字を含む、複数の語を組み合わせた名前も使用できます。
あるいは、名前は「CharacterNames」管理テキスト ドキュメントで指定できます。これは、管理テキストリソースの生成タスクを実行すると自動的に作成されます。これを使用して、表示名をローカライズしたり、Unityエディターの外部で編集したりします。管理テキストドキュメントのレコードは、アクター構成で設定された表示名よりも優先され、それらをオーバーライドします。
表示名をシナリオ変数にバインドして、シナリオスクリプトからゲームの進行中に動的に変更することも可能です。表示名をバインドするには、キャラクター構成メニューでシナリオ変数の名前を中括弧で囲んで指定します。
その後、スクリプトで変数の値を変更すると、表示名も変更されます。
@set PlayerName="謎の男"
Player: ...
@set PlayerName="シュタイン博士"
Player: シュタイン博士と呼んでください。名前バインディング機能を利用して、@input コマンドでプレイヤーが自分の表示名を選べるようにすることも可能です。
@input PlayerName summary:"あなたの名前を選んでください。"
Player: {PlayerName}と呼んでください。中括弧の内容は実際には完全な シナリオ式 として扱われるため、表示名を評価する複雑なケースにも対応できます。たとえば、ある時点までキャラクターの事前定義されたローカライズ可能な表示名を保持し、その後プレイヤーにカスタム名を選択させたい場合があります。
対象のキャラクターが「Char1」というIDを持ち、事前定義された名前が T_PredefinedName 管理テキストレコード として保存され、プレイヤーが入力した値が name シナリオ変数 として保存され、プレイヤーが名前を設定したときに nameSet 変数が true に設定されるとします。次の式を Display Name プロパティに割り当てます:{ nameSet ? name : T_PredefinedName }。
次に、次のシナリオスクリプトを使用します。
@char Char1
Char1: 私の名前は現在 `T_PredefinedName` 管理テキストレコードによって事前定義されています。
Char1: ローカライズ可能です。ロケールを変更してください。それに応じて更新されます。
Char1: さて、プレイヤーにカスタム名を入力させます。
; `value` パラメーターを介して割り当てられたデフォルトの入力値に注目してください。
; 管理テキストから取得され、ローカライズも可能です。
@input name summary:"あなたの名前を選んでください。" value:{T_DefaultName}
; ここで、値をどこから取得するかを決定するために
; 表示名の式で使用される変数を設定します。
@set nameSet=true
Char1: 私の表示名は `name` シナリオ変数にバインドされました。Has Name が無効になっている場合、表示名もキャラクターIDもプリンターUIに表示されません。リンクされたプリンター があってもIDは表示したくない ナレーターキャラクター などに便利です。
名前ラベル
上記の表示名はほとんどの場合に推奨されますが、数行だけアクターの名前を変更したり、複数のアクターを同じ行の話者にしたりしたい場合があります。そのようなケースごとに専用のアクターや変数による表示名を設定するのは現実的ではありません。代わりに、as 汎用パラメーター の使用を検討してください。
; 「Kohaku」キャラクターには構成で設定されたカスタム表示名があるかもしれませんが、
; この行は名前として「誰か」を使用して表示します。
Kohaku: 吾輩は猫である。[< as:"誰か"]
; 「全員」を話者名としてこの行を表示し、
; 表示されているすべてのキャラクターをそのテキストの話者にします。
*: 吾輩は猫である![< as:"全員"]
; 同様ですが、「Kohaku」と「Yuko」のみを話者にします。
Kohaku,Yuko: 吾輩は猫である?[< as:"KohakuとYuko"]— as パラメーターはローカライズ可能であり、翻訳用にスクリプトローカライズドキュメントへ出力されます。さらに、話者ハイライト 機能は、話者IDで指定された * と , を認識し、すべての/選択されたキャラクターを話者としてハイライトします。
メッセージの色
キャラクター構成で Use Character Color が有効になっている場合、@print コマンドまたは汎用テキスト行で対応するキャラクターIDが指定されると、プリンターのテキストメッセージと名前ラベルが指定された色で着色されます。
次のビデオは、表示名とキャラクターカラーの使用方法を示しています。
アバターテクスチャ
@char コマンドの avatar パラメーターを使用して、キャラクターにアバターテクスチャを割り当てることができます。アバターは、キャラクターに関連付けられたテキストメッセージを表示するときに、互換性のあるテキストプリンターによって表示されます。
現在、アバター機能をサポートしているのは Wide および Chat 組み込みプリンターのみです。カスタムプリンターでこの機能をサポートするには、Revealable Text Printer Panel コンポーネントの Author Avatar Image プロパティに Author Image コンポーネントを持つゲームオブジェクトを割り当てます。
特定のアバターを使用するには、まずそれをアバターリソースに追加して名前を付ける必要があります。これは、キャラクター構成メニューの Avatar Resources プロパティを使用して実行できます。
注意
アバター名は任意であり、既存のキャラクターIDや外観を含める必要はありません。これは、アバターをキャラクターに関連付けて自動的に表示されるようにしたい場合にのみ必要です。
その後、次のように特定のアバターテクスチャを表示できます。
@char CharacterId avatar:AvatarNameキャラクターのデフォルトアバターを設定するには、アバターテクスチャリソース名を CharacterID/Default と同じにします。たとえば、ID Kohaku のキャラクターのデフォルトアバターを設定するには、アバターリソースに Kohaku/Default という名前を付けます。デフォルトのアバターは、@char コマンドで avatar パラメーターが指定されていない場合でも自動的に表示されます。
アバターを特定のキャラクターの外観に関連付けて、キャラクターが外観を変更したときにアバターも自動的に変更されるようにすることも可能です。これを行うには、CharacterID/CharacterAppearance の形式を使用してアバターリソースに名前を付けます。ここで CharacterAppearance は、アバターリソースをマップする外観の名前です。
テキストプリンター内にキャラクターのアバターのみを表示し、キャラクター自体を隠すには、@char コマンドの visible パラメーターを false に設定します。例:
@char CharacterId !visibleキャラクター自体を隠したままアバターを頻繁に変更する場合、キャラクター構成メニューで Auto Show On Modify を無効にすることを検討してください。無効にすると、隠れているキャラクターのパラメーターを変更する際に !visible を指定する必要がなくなります。
注意
アバターはキャラクターの外観と直接結び付いておらず、シーン上のキャラクターを表す方法と見なすべきではありません。アバターは、互換性のあるテキストプリンターに任意の画像を「注入」するスタンドアロン機能です。実際のキャラクターをテキストプリンター(またはカスタムUI)内に表示したい場合は、アクターをテクスチャにレンダリング する機能を確認してください。
話者ハイライト
キャラクター構成で有効にすると、話者ハイライトは、最後に表示されたメッセージがキャラクターに関連付けられているかどうかに基づいて、指定された ポーズ をキャラクターに適用します。これにより、通常は色合いやスケーリングによって、「話している」キャラクターを自動的にハイライトできます。
複数のキャラクターに同じハイライトポーズを適用する場合は、キャラクター構成のルートにある Shared Poses を使用することをお勧めします。
リップシンク
イベント駆動
アニメーション可能なキャラクター実装(汎用、レイヤー、Live2Dなど)は、On Started Speaking および On Finished Speaking Unityイベントを提供します。そのようなキャラクターが表示されるメッセージの話者になったとき、または話者でなくなったとき(正確には、メッセージが完全に表示されたとき)にイベントが呼び出され、制御対象のキャラクターの口のアニメーションを開始または停止するなど、任意のカスタムロジックをトリガーできます。
オートボイス 機能が有効になっている場合、イベントはボイスオーバーによって駆動されます。それ以外の場合、表示されたテキストメッセージがイベントをアクティブにします。後者の場合、手動でイベントをミュートしたい場合があるでしょう(たとえば、句読点が表示されたときに口のアニメーションを防ぐため)。そのような場合は、@lipSync コマンドを使用してください。
オーディオ駆動
キャラクターの口のアニメーションをボイスオーディオクリップの実際の波形で駆動したい場合は、キャラクター構成の Voice Source オプションを使用してください。Unityの Audio Source コンポーネントを持つプレハブが割り当てられると、Naninovelはキャラクターオブジェクトの下にプレハブをインスタンス化し、オーディオソースコンポーネントを介してキャラクターのボイスを再生します。
キャラクターのボイスに使用される専用のオーディオソースコンポーネントにアクセスできるため、再生されたオーディオの波形を分析し、それに応じて口のアニメーションを駆動するカスタムソリューションをフックできます。これを実現するのに役立つサードパーティのソリューションがいくつかあります。たとえば、Live2Dの Cubism Audio Mouth Input コンポーネントや SALSA です。
リンクされたプリンター
Linked Printer プロパティを使用して、テキストプリンター をキャラクターに関連付けることが可能です。
リンクすると、そのキャラクターを話者とするメッセージの処理に、プリンターが自動的に使用されます。
@print コマンド(汎用テキスト行を表示するときにも内部的に使用されます)は、デフォルトで、関連付けられたプリンターをデフォルトにし、他の表示されているプリンターを非表示にすることに注意してください。プリンターがキャラクターにリンクされている場合、printコマンドは、対応するキャラクターに関連付けられたテキストを表示する際に、現在表示されているテキストプリンターとデフォルトのテキストプリンターを自動的に変更します。プリンターアクター構成メニューの Auto Default プロパティを無効にすることで、この動作を防ぐことができます。無効にすると、@printer コマンドを使用して手動で表示/非表示を切り替え、デフォルトのプリンターを切り替える必要があります。
ヒント
プリンターを ナレーターキャラクター にリンクし、Has Name を無効にして、ナレーションテキストをプリンターにリンクします。これにより、@printer を使用して非キャラクター(デフォルト)プリンターに毎回戻す必要がなくなります。
実行時にプリンターをリンクまたはリンク解除するには、@linkPrinter と @unlinkPrinter コマンドを使用します。また、@printer の下にコマンドをネストすることで、すべての話者を一時的に特定のプリンターにリンクできます。
; 話者のない行にはデフォルトで「Fullscreen」を使用します。
@linkPrinter Fullscreen to:DefaultAuthor
; 「Kohaku」はデフォルトで「Wide」プリンターを使用します。
@linkPrinter Wide to:Kohaku
これは「Fullscreen」で表示されます。
Kohaku: そして私のセリフは「Wide」で表示されます!
; ネストされたコマンドでは「Dialogue」を強制します。
@printer Dialogue
これは「Dialogue」で表示されます。
Kohaku: 今は「Dialogue」を使わざるを得ません。
「Fullscreen」に戻ります。
Kohaku: そして私はまた「Wide」を使えます!
; 「Kohaku」にリンクされているプリンターが何であれ、リンクを解除します。
@unlinkPrinter from:Kohaku
これは影響を受けず、引き続き「Fullscreen」を使用します。
Kohaku: 私の「Wide」はどこへ?!「Fullscreen」で表示中...デフォルトの話者
通常のキャラクターに リンクされたプリンター を使用する場合、明示的な話者のない 汎用テキスト行 と @print コマンドを専用のプリンターにフォールバックさせたい場合があります。これにより、そのようなすべての行にナレーターIDを指定したり、@printer コマンドで手動でプリンターを切り替えたりする必要がなくなります。
この動作を有効にするには、DefaultAuthor IDを持つキャラクターレコードを作成し、その実装を NarratorCharacter に設定し、Has Name オプションを無効にします。このキャラクターは、話者のないテキストのフォールバック話者として機能し、リンクされたプリンターを自動的に適用します。
プレースホルダーキャラクター
プレースホルダーはデフォルトの実装です。キャラクター用の視覚的なアセットがまだない段階で、シナリオのドラフトを作成するために使用します。識別子、表示名、色などのアクターメタデータを使用して、キャラクタープレースホルダーをプロシージャル生成します。
以下は、上にいくつかのプレースホルダーキャラクターが配置された プレースホルダー背景 の例です。現在話しているキャラクターがスケールと不透明度の増加によってハイライトされていることに注目してください。
スプライトキャラクター
キャラクターアクターのスプライト実装は最も一般的で単純なものです。キャラクターの外観を表すために、クワッドメッシュ(スプライト)に貼り付けられた一連の テクスチャ アセットを使用します。テクスチャには、.jpg、.png、.tiff、.psd、または Unityでサポートされている その他の画像ファイル形式を使用できます。
ヒント
開発ワークフローに最も適したファイル形式を選択してください。プロジェクトをビルドすると、Unityはすべてのソースリソース(テクスチャ、オーディオ、ビデオなど)をターゲットプラットフォームに最適な形式に自動的に変換するため、プロジェクトにリソースを保存する際の形式は重要ではありません。Unityがプロジェクトアセットを管理する方法の詳細については、公式ドキュメント を参照してください。
シーン上のスプライトキャラクターメッシュの初期(スケーリングされていない)サイズは、参照解像度(カメラ構成)、キャラクターの Pixels Per Unit プロパティ(構成メニューで各キャラクターアクターに設定)、およびソーステクスチャの解像度によって決まります。
最高のレンダリング品質と最適なパフォーマンスを実現するには、通常、すべてのキャラクターに対してデフォルトの Pixels Per Unit 値(100)を維持し、テクスチャ解像度を介して目的の初期キャラクターサイズを制御することをお勧めします。たとえば、ゲームの参照解像度がデフォルトの 1920x1080 ピクセルであるとします。キャラクターが画面の高さ全体を占めるようにするには、キャラクターのテクスチャの高さを(Photoshopや他の画像エディターでサイズ変更するなどして)1080 ピクセルに設定します。別のキャラクターが画面の高さの2/3を占めるようにするには、高さを 1080 * 2/3 に設定する、といった具合です。
ダイススプライトキャラクター
オープンソースの SpriteDicing パッケージで構築された DicedSpriteCharacter 実装により、キャラクタースプライトのテクスチャ領域を再利用することで、ビルドサイズとテクスチャメモリを大幅に削減できます。
Unity Package Manager 経由でパッケージをインストールします。Package Managerウィンドウを開き(Window -> Package Manager)、「+」ボタンをクリックし、「Add package from git URL」を選択して、次のURL:
https://github.com/elringus/sprite-dicing.git?path=/plugins/unity/Assets/SpriteDicing— を入力フィールドに入力し、「Add」をクリックします。
注意
Gitリポジトリからパッケージをインストールする前に、Gitクライアント がマシンにインストールされており、Git実行ファイルのパスが PATHシステム環境変数 に設定されていることを確認してください(通常はインストール時に自動的に行われます)。
「SpriteDicing」拡張機能がUPM経由でインストールされると、キャラクター実装リストに Naninovel.DicedSpriteCharacter オプションが表示されます。
キャラクターの外観を含む DicedSpriteAtlas アセットは、ダイススプライトキャラクターのリソースとして使用されます。各外観は、アトラスに含まれるダイススプライトに名前でマップされます。
ヒント
キャラクターメタデータプロパティ(ピクセルパーユニット、ピボットなど)はシーン上でキャラクターを表すために使用されるレンダーテクスチャに適用されますが、同様のダイスアトラスプロパティは生成されたダイススプライトに適用されます。アトラスプロパティを変更する場合は、変更を有効にするために再構築することを忘れないでください。
次のビデオガイドでは、ダイススプライトアトラスの作成と構成、作成されたアトラスに基づく新しいダイスキャラクターの追加、シナリオスクリプトからのキャラクターの制御について説明しています。
利用可能なダイスオプションと使用例の詳細については、拡張機能のドキュメント を参照してください。
例
ダイスアクターの設定例については、ダイスアクターサンプル を参照してください。
ユニバーサルキャラクター
キャラクターを単純なスプライト以上のものにしたい場合、まず検討すべき選択肢がユニバーサル実装です。Unityで利用可能な標準レンダラー(メッシュ、パーティクル、スキニングされたスプライト、タイルマップなど)をすべてサポートします。さらに、ユニバーサルアクターのコンテンツはライトとVolumeの影響を受けます。
Create -> Naninovel -> Character -> Universal アセットコンテキストメニューを使用して、テンプレートから新しいユニバーサルキャラクタープレハブを作成し、ダブルクリックしてプレハブ編集モードに入ります。ルートオブジェクトには Universal Character Behaviour コンポーネントがあります。これはNaninovelとプレハブコンテンツの間のアダプターです。
このプレハブはUnityの他のプレハブと同じように構築できます。Naninovelはプレハブルート以下にある互換性のあるすべてのレンダラーを取得し、実行時にキャラクター用のレンダーテクスチャに合成します。コンポーネントの On Appearance Changed イベントを使用すると、外観の変更に対するコールバックを設定できます。たとえば、Unityの Animator システムを使用してキャラクターのアニメーションを制御できます。
ユニバーサルアクターに含めたいオブジェクトが2Dライトやプロシージャル描画などのカスタムレンダリング機能を使用している場合は、コンポーネントに Naninovel.IUniversalActorDrawable インターフェースを実装し、そのコンポーネントをカスタムコンテンツを含むゲームオブジェクトにアタッチすることで互換性を持たせることができます。たとえば、Live2Dアクター はこの方法で実装されています。
レイヤーキャラクター
レイヤー実装は ユニバーサル をベースにしており、Layered Actor Controller コンポーネントも備えています。このコンポーネントを使用すると、複数のレイヤーからキャラクターを構成し、実行時にシナリオスクリプトを介して個別またはグループで切り替えることができます。
レイヤーキャラクタープレハブを作成するには、Create -> Naninovel -> Character -> Layered アセットコンテキストメニューを使用します。プレハブ編集モード に入ってレイヤーを構成します。いくつかのレイヤーとグループがデフォルトで作成されます。それらを使用することも、削除して独自のものを追加することもできます。
ルートプレハブオブジェクトの各子ゲームオブジェクトのうち、Layered Actor Layer コンポーネントを持つものはレイヤーと見なされます。その他のオブジェクトはグループと見なされます。整理とトランスフォームの目的以外に、レイヤーをグループ内に配置すると、シナリオスクリプト内の単一の式で単一のレイヤーを選択したり、グループ内のすべてのレイヤーを無効化または有効化したりできます(これについては後で詳しく説明します)。
レイヤーのゲームオブジェクトに レンダラー もある場合、そのレンダラーはレイヤー状態の制御に自動的に使用されます。レイヤーが無効になるとレンダラーも無効になり、その逆も同様です。特定のレイヤーをデフォルトで非表示にするには、ゲームオブジェクトではなく、そのレンダラーコンポーネントを無効にします。または、On Layer Enabled イベントと On Layer Disabled イベントを使用して、レイヤーの有効状態を制御できます。
ヒント
Photoshopでレイヤーキャラクターアートを作成する場合は、Unityの PSD Importerパッケージ を使用して、すべてのレイヤーとその位置を保持したままキャラクタープレハブを自動的に生成することを検討してください。レイヤー階層を保持するには、インポート設定で Use Layer Grouping オプションを有効にしてください。
シナリオスクリプトでレイヤーキャラクターを制御するには、他のキャラクター実装と同じ方法で @char コマンドを使用します。唯一の違いは外観の設定方法です。単一のIDの代わりに、レイヤー合成式を使用します。3つの式のタイプがあります。
- グループ内の単一のレイヤーを有効にする:
group>layer - レイヤーを有効にする:
group+layer - レイヤーを無効にする:
group-layer
たとえば、「Uniform」、「SportSuit」、「Pajama」の3つのレイヤーを含む「Body」グループを持つ「Miho」キャラクターを考えてみましょう。「Uniform」レイヤーを有効にし、他のすべてを無効にするには、次のコマンドを使用します。
@char Miho.Body>Uniformグループ内の他のレイヤーに影響を与えずにレイヤーを有効または無効にするには、「>」の代わりにそれぞれ「+」と「-」を使用します。コンマで区切って複数の合成式を指定することもできます。
; メガネを有効にし、帽子を無効にし、「Cool」感情を選択します。
@char CharId.Head/Accessories+BlackGlasses,Head-Hat,Head/Emotions>Coolグループ外のレイヤー(ルートプレハブオブジェクトの子)を選択するには、グループ部分を省略するだけです。例:
; 「Halo」レイヤーオブジェクトがプレハブルートの下に配置されている場合、それを無効にします。
@char CharId.-Halo合成式でレイヤー名を省略することで、グループ内のすべてのレイヤー(選択式を使用する場合は、さらにその隣接グループ)に影響を与えることも可能です。
; 「Body/Decoration」グループ内のすべてのレイヤーを無効にします。
@char CharId.Body/Decoration-
; 既存のすべてのレイヤーを有効にします。
@char CharId.+
; 「Poses/Light」と「Poses/Dark」グループがある場合、「Light」グループ内の
; すべてのレイヤーを有効にし、「Dark」グループ内のレイヤーを無効にします。
@char CharId.Poses/Light>上記の式は、ターゲットグループの直接の子だけでなく、その配下のグループに含まれるすべてのレイヤーにも再帰的に影響します。
外観が指定されていない場合(たとえば、事前に外観を設定せずに @char CharId を実行した場合)、デフォルトの外観が使用されます。レイヤーキャラクターのデフォルトの外観は、エディターでのレイヤープレハブの見た目と同じです。
Layered Actor Controller コンポーネントの Composition Map プロパティを介して、合成式をキーにマップすることが可能です。
— その後、キーを使用してレイヤーアクターの外観を指定できます。
; 「Body>Uniform,Hair/Back>Straight,Hair/Front>Straight,Shoes>Grey」と同等です。
@char Miho.Uniform
; 「Hair/Back>Straight,Hair/Front>Straight」と同等です。
@char Miho.StraightHair
; キーと式を組み合わせることも可能です。
@char Miho.Uniform,Hair/Front>Shortレイヤーキャラクタープレハブを編集しているときに、マップレコードを右クリックして「Preview Composition」を選択することで、マップされた合成式をプレビューできます。別のメニュー項目「Paste Current Composition」は、キャラクターの現在の合成式文字列(階層内の有効/無効なスプライトレンダラーに基づく)を生成し、対象のレコードに貼り付けます。これを使用すると、現在のプレハブ状態を合成項目にすばやくマップできます。
例
レイヤーアクターの設定例については、レイヤーアクターサンプル を参照してください。
汎用キャラクター
汎用キャラクターは、最も柔軟なキャラクターアクター実装です。ルートオブジェクトに Generic Character Behaviour コンポーネントをアタッチしたプレハブを使用します。外観の変更やその他すべてのキャラクターパラメーターは Unityイベント として渡されるため、基になるオブジェクトの動作を自由に実装できます。
注意
汎用アクター実装は、シナリオスクリプトからのイベントを転送するだけです。外観や可視性の変更コマンドへの反応、話者ハイライト機能の対応の有無や方法など、実際の動作はユーザーが実装する必要があります。アクター関連の機能のほとんどが、汎用実装で自動的に機能することを期待しないでください。
テンプレートから汎用キャラクタープレハブを作成するには、Create -> Naninovel -> Character -> Generic アセットコンテキストメニューを使用します。
3Dリグモデルを汎用キャラクターとして設定し、Animator コンポーネントを介して外観の変更をリグアニメーションにルーティングする例については、次のビデオチュートリアルを確認してください。ビデオは古いNaninovelバージョンでキャプチャされており、一部のプロパティとコンポーネント名が現在とは異なっていることに注意してください。最新情報については、上記のドキュメントを参照してください。
ヒント
Unityの Animator コンポーネントは、ゲームオブジェクトが同じフレームで有効化/無効化されたときに SetTrigger の登録に失敗する可能性があります。可視性の変更を処理するために GameObject.SetActive を使用する場合(上記のチュートリアルで示されているように)、代わりにレンダラーを持つ子オブジェクトを有効化/無効化することを検討してください。
例
3Dアニメーションモデルをホストするために汎用キャラクター実装が使用されている 汎用アクターサンプル を確認してください。
ビデオキャラクター
ビデオキャラクターは、外観を表すためにループ再生される ビデオクリップ アセットを使用します。
各プラットフォームでサポートされているビデオ形式については、ビデオソースに関するUnityドキュメント を参照してください。
アルファチャンネル(透明度)付きのビデオを使用する場合は、サポートされている形式に関するガイド を参照してください。
特定の外観がループしないようにするには、外観名の末尾に NoLoop(大文字と小文字は区別されません)を追加します。
Live2Dキャラクター
Live2Dキャラクター実装は、Live2D Cubism 2Dモデリングおよびアニメーションソフトウェアで作成されたアセットを使用します。
この実装を使用するには、まず Live2D Cubism SDK for Unity をインストールする必要があります。インストールと使用方法については、公式Live2Dドキュメントを参照してください。
Live2D SDK for Unityをインストールした後、Naninovel -> Extensions -> Enable Live2D エディターメニュー項目をクリックして、Live2Dとエンジンの統合を提供するNaninovelモジュールをアクティブにします。
注意
このサードパーティ商用製品との統合は、主にNaninovelを他のツールと連携させる方法を示すサンプルです。Live2Dの更新や変更に合わせてサンプルの互換性を維持するよう努めていますが、提供する機能は最小限にとどまります。また、サンプルの範囲を超える他製品とNaninovelの併用については、サポートや支援を提供できません。
アクターのLive2Dリソースには、ルートオブジェクトに Live2D Character Behaviour コンポーネントがアタッチされている必要があります。外観の変更は、SetTrigger コマンドとしてアニメーターコンポーネントにルーティングされ、外観がトリガー名になります。たとえば、「Kaori」Live2Dキャラクタープレハブがあり、「Surprise」という名前のトリガーを呼び出したい場合は、次のコマンドを使用します。
@char Kaori.Surprise上記のコマンドは、プレハブにアタッチされたアニメーターコントローラーで「Surprise」引数を使用して SetTrigger を呼び出そうとするだけであることに注意してください。基になる アニメーター ステートマシンは自分で構成する必要があります。
Live2Dの Cubism Look Controller および Cubism Mouth Controller コンポーネントがLive2Dモデルプレハブに存在し、設定されている場合、Live2D Character Behaviour は必要に応じてそれらを使用し、キャラクターの視線方向と口のアニメーション(リップシンク機能)を制御できます。設定の詳細については、視線追跡 および リップシンク に関するLive2Dドキュメントを参照してください。
次のビデオガイドでは、Cubism EditorからのLive2Dキャラクターのエクスポート、プレハブの構成、単純なアニメーターステートマシンの作成、およびシナリオスクリプトからのキャラクターの制御について説明しています。
例
Live2DキャラクターがNaninovelで使用されている Live2Dサンプル を確認してください。
Spineキャラクター
Spineキャラクター実装は、Spine 2Dモデリングおよびアニメーションソフトウェアで作成されたアセットを使用します。
この実装を使用するには、まずバージョン4.3以降の Spine runtime for Unity をインストールする必要があります。インストールと使用方法については、公式ドキュメント を参照してください。
Spine runtime for Unityをインストールした後、Naninovel -> Extensions -> Enable Spine エディターメニュー項目をクリックして、Spineとエンジンの統合を提供するNaninovelモジュールをアクティブにします。
注意
このサードパーティ商用製品との統合は、主にNaninovelを他のツールと連携させる方法を示すサンプルです。Spineの更新や変更に合わせてサンプルの互換性を維持するよう努めていますが、提供する機能は最小限にとどまります。また、サンプルの範囲を超える他製品とNaninovelの併用については、サポートや支援を提供できません。
実装のリソースとして使用されるSpineキャラクタープレハブには、ルートオブジェクトに Spine Controller コンポーネントがアタッチされている必要があります。シナリオスクリプトコマンド(@char など)からの外観の変更は、汎用実装 と同様に、コントローラーの On Appearance Changed イベントにルーティングされます。イベントは好きなように処理できます。たとえば、Spineの SetAnimation メソッドを使用したり、Unityのアニメーターコントローラーでトリガーを呼び出したりします。
Control Animation が有効な場合、外観は Default Track 上でループ再生されるSpineアニメーションにマッピングされます。別のトラックでアニメーションを再生するには、@ に続けてトラックインデックスを外観名に追加します。
@char Hero.Idle,Shoot@1これは、Idle をデフォルトトラックで、Shoot をトラック1で再生します。その後 @char Hero.Idle を適用すると、Idle の再生は継続され、トラック1はミックスアウトされます。外観を On Appearance Changed コールバックのみで処理するには、Control Animation を無効にします。
ヒント
Spine Controller から継承されたカスタムコンポーネントを使用することが可能です。これにより、仮想メソッドと関連する動作をオーバーライドできます(たとえば、特定の時間またはトランジションパラメーターで外観の変更を処理する)。
内部的に、Spineモデルはテクスチャにレンダリングされ、その後画面に投影されます。これは、キャラクターをフェードするときの半透明のオーバードローアーティファクトを防ぐために必要です。テクスチャサイズを指定するには、Render Canvas コンポーネント(Spine Controller を追加すると自動的にアタッチされます)を使用します。ギズモ を有効にして、プレハブモードで現在のサイズをプレビューします。サイズが大きいほどテクスチャが消費するメモリが多くなるため、できるだけ小さく保ってください。
注意
Spineの Skeleton Render Separator(マルチレンダー)ワークフローはサポートされていません。そのワークフローをNaninovelと統合するには、カスタムキャラクター実装を作成してください。
例
SpineキャラクターがNaninovelで使用されている Spineサンプル を確認してください。
ナレーターキャラクター
ナレーターキャラクターはシーン上に実体(外観、位置、視線方向、色合いなど)を持ちませんが、表示されるメッセージの話者になることができ、関連する構成オプション(表示名、メッセージの色、リンクされたプリンターなど)を持っています。
テクスチャへのレンダリング
汎用以外のすべての実装で、キャラクターおよび背景アクターをテクスチャアセットにレンダリングできます。このテクスチャは、カスタムUI、プリンター、マテリアル、その他の互換性のあるソースに割り当てられます。
アクター構成の Render Texture プロパティを使用してレンダーテクスチャアセットを割り当てます。テクスチャが割り当てられると、アクターはシーン上のゲームオブジェクトとして表示されず、テクスチャにレンダリングされます。Render Rectangle プロパティを使用すると、テクスチャにレンダリングするアクターの領域を指定できます。
注意
Addressablesパッケージ を使用する場合、Unityは アセット参照を適切に追跡できません。これにより、ビルドでレンダーテクスチャが重複し、機能が正しく動作しなくなる可能性があります。(AssetReference APIを介して)参照を手動で処理するか、以下に示すように Get Actor Render Texture コンポーネントを使用してください。
アクターがテクスチャにレンダリングされると、トランスフォーム(位置、回転、スケール)およびその他のいくつかの変更は効果がありません。代わりに、レンダーテクスチャのホストオブジェクト(テクスチャがUIのRaw Imageコンポーネントに割り当てられている場合はそのイメージなど)のトランスフォームを変更します。
以下のビデオは、Live2Dキャラクターをテクスチャにレンダリングし、それをカスタムテキストプリンターに割り当てる方法を示しています。プリンターはキャラクターにリンクされているため、関連するテキストメッセージが処理されると、キャラクターはプリンターとともに自動的に表示および非表示になります。
他のすべてのキャラクターおよび背景実装タイプ(汎用を除く)は、Live2Dの例と同様にテクスチャにレンダリングするように設定できます。
複数の外観
汎用、Live2D、Spineアクターは、複数の外観を一度に適用することをサポートしています。例:
@char Kohaku.Body/Pose1,Face/Smile— このコマンドは Body/Pose1 および Face/Smile の外観変更イベントを呼び出します。複数のアニメータートリガーを同時に発火させ、複雑なアニメーション状態を設定する際に利用できます。すべての外観は、アクターの状態とともにシリアル化され、ゲームのロードまたはロールバック時に復元されます。