背景
キャラクター とは対照的に、背景はシーンのバックレイヤーを表すために使用されるアクターです。場所、風景、景観、または常にキャラクターの後ろに表示される必要があるものです。
背景アクターは、名前、外観、可視性、およびトランスフォーム(位置、回転、スケール)で定義されます。時間とともに外観、可視性、トランスフォームを変更できます。
背景の動作は、Naninovel -> Configuration -> Backgrounds エディターメニューを使用して構成できます。利用可能なオプションについては、構成ガイド を参照してください。背景のリソースマネージャーには、Naninovel -> Resources -> Backgrounds エディターメニューを使用してアクセスできます。
シナリオスクリプトでは、背景は主に @back コマンドで制御されます。
; 「River」をメイン背景の外観として設定します
@back River
; 上記と同じですが、「RadialBlur」トランジションエフェクトも使用します
@back River.RadialBlur背景は、従来のVNゲームフローによりよく対応するために、キャラクターとは少し異なる方法で処理されます。ほとんどの場合、シーンには1つの背景アクターしかなく、そのアクターが次々と異なる外観へ遷移していくことになるでしょう。スクリプトで同じアクターIDを繰り返す手間を省くために、MainBackground アクターが対象であるとみなして、背景の外観とトランジションタイプ(オプション)のみをプライマリパラメーターとして指定できます。そうでない場合は、id パラメーターを介して背景アクターのIDを明示的に指定できます。
; 「Night」と「Day」のビデオクリップを持つ「CityVideo」アクターがあるとします。
; 昼のクリップを再生するビデオ背景を表示します。
@back Day id:CityVideo
; リップルエフェクトで夜のクリップに遷移します。
@back Night.Ripple id:CityVideo
; ビデオ背景を非表示にします。
@hide CityVideoメイン背景アクターレコードは、背景リソースマネージャーにあらかじめ作成されており、名前の変更や削除はできません。ただし、メイン背景のパラメーター(実装、ピボット、PPUなど)は自由に変更できます。
背景アクターの概要については、次のビデオチュートリアルを確認してください。
アクターレコード
背景や背景の外観が多く、エディターメニューですべてを割り当てるのが不便な場合は、アクターレコードアセット(Create -> Naninovel -> Actor Record -> Background)を使用してください。これらはマルチ編集をサポートしており、フォルダーでレコードを整理できます。例については、以下のビデオを確認してください。
Zオーダー
複数の背景を同時に表示すると、互いを覆い隠してしまいがちです。
@back id:1
@back id:2— 背景 1 と 2 の両方がフルスクリーンの不透明テクスチャである場合、後で追加されたものがもう一方を完全に覆います。もう一方の後ろにある最初の背景を表示するには、もう一方を非表示にするか、Z位置(深度)を変更して描画順序を変更します。
; 背景2を非表示にして、後ろにある最初の背景を見えるようにします
@back id:2 !visible
; アクターを非表示にするための専用コマンドもあります
@hide 2
; または、Z位置を変更します
@back id:1 pos:,,98
@back id:2 pos:,,99Z位置の値が大きいほど、カメラからの距離が遠くなります。したがって、カメラにより近い位置に配置されたアクターが、他のアクターの上に描画されます。
背景は、他のアクタータイプの後ろに表示されるように、デフォルトで特定のZオフセットで配置されます。オフセット値は、背景構成の Z Offset プロパティで変更できます。
Zファイティングの問題を防ぐために、背景は最初に追加(表示)されたときに、Z軸に沿って互いにさらにオフセットされます。オフセットは Z Step 設定で制御されます。
マッチモード
カメラ が正投影モードでレンダリングしており、背景アクター構成の Match Mode が無効になっていない場合、アクターは現在の画面サイズに合わせてサイズを調整しようとします。これは、ディスプレイの アスペクト比 が背景のものと異なる場合を処理するために実行されます。マッチングが無効になっており、アスペクト比が異なる場合、「黒帯」が表示されます。
サポートするアスペクト比を強制 することもできますが、より多くの環境に対応できる代替案は、ゲームを任意のアスペクト比に適応できるようにすることです。組み込みGUIはすでに柔軟で、任意の画面サイズに適応します。また、アクターの配置はシーン境界に対する相対位置であり、その境界は画面に合わせられます。背景のマッチモードを使用すると、背景アクターが画面をどのように埋めるかを設定できます。
各背景アクター(汎用実装を除く)には、次のマッチモードを設定できます。
| モード | 説明 |
|---|---|
| Crop | 背景は常にカメラの視錐台全体を占有し、ディスプレイのアスペクト比に関係なく、プレイヤーに黒帯が表示されないようにします。ただし、一部の背景領域が切り取られる可能性があります。新しい背景アクターのデフォルト設定です。 |
| Fit | 背景領域全体は常に表示されたままですが、アスペクト比が異なる場合、黒帯が表示されます。 |
| Custom | カスタム比率で幅または高さを一致させることができます。比率は Custom Match Ratio プロパティで制御されます。最小値(0)は幅を一致させて高さを無視し、最大値(1)はその逆です。 |
| Disable | マッチングを一切行いません。 |
ヒント
汎用またはカスタム背景に同様のマッチング機能を実装したい場合は、Discordの 画面へのスケーリングの例 を参照してください。
ポーズ
各背景には、名前付きの状態(ポーズ)を指定できる Poses プロパティがあります。
ポーズ名を @back コマンドで外観として使用すると、コマンドパラメーターを介して個別に指定する代わりに、ポーズで指定された選択済みのパラメーターをすべて一度に適用できます。
; メイン背景に「Day」ポーズが定義されている場合、
; ポーズで指定された選択済みのパラメーターをすべて適用します。
@back Day
; 上記と同じですが、「City」IDを持つ背景アクターに対して、
; 3秒かけて「DropFade」トランジションを使用します。
@back Day.DropFade id:City time:3なお、ポーズを外観として使用する場合でも、個々のパラメーターをオーバーライドできます。例:
; メイン背景に「Day」ポーズが定義されている場合、
; ポーズ状態で指定されたすべてのパラメーターを適用しますが、
; コマンドでオーバーライドされている色合いは除きます。
@back Day tint:#ff45cbプレースホルダー背景
プレースホルダー実装はデフォルトのものであり、背景を表す視覚的なアセットがまだない場合のシナリオドラフト作成を目的としています。実行時に背景の外観をプロシージャル生成するため、シナリオの作成中に、現在どの背景が表示されているかを把握できます。以下は、上にいくつかの プレースホルダーキャラクター が配置されたプレースホルダー「EveningScene」背景の例です。
Naninovelは背景プレースホルダーを自動的に生成しますが、背景エディターの Placeholder Appearances リストを使用して、特定の外観の見た目を定義できます。
スプライト背景
背景アクターのスプライト実装は最も一般的で単純なものです。背景の外観を表すために、クワッドメッシュ(スプライト)に貼り付けられた一連の テクスチャ アセットを使用します。テクスチャには、.jpg、.png、.tiff、.psd、または Unityでサポートされている その他の画像ファイル形式を使用できます。
ヒント
開発ワークフローに最も適したファイル形式を選択してください。プロジェクトをビルドすると、Unityはすべてのソースリソース(テクスチャ、オーディオ、ビデオなど)をターゲットプラットフォームに最適な形式に自動的に変換するため、プロジェクトにリソースを保存する際の形式は重要ではありません。Unityがプロジェクトアセットを管理する方法の詳細については、公式ドキュメント を参照してください。
シーン上のスプライト背景メッシュの初期(スケーリングされていない)サイズは、参照解像度(カメラ構成)、背景の Pixels Per Unit プロパティ(構成メニューで各背景アクターに設定)、およびソーステクスチャの解像度によって決まります。
Naninovelはデフォルトで背景がカメラの視錐台全体をカバーするようにしようとするため、アスペクト比が参照解像度のアスペクト比と一致するようにソーステクスチャのサイズを設定してください。この動作を変更または無効にする方法の詳細については、マッチモードガイド を参照してください。
ヒント
アートアセット(キャラクターと背景の両方)の作業を開始する前に、チームで参照解像度を決めておいてください。これにより、アーティストは正しい寸法でアセットを作成でき、後で編集する必要がなくなります。
ダイススプライト背景
オープンソースの SpriteDicing パッケージで構築された DicedSpriteBackground 実装により、関連するテクスチャのデータの大部分が類似している場合に、背景スプライトのテクスチャ領域を再利用することで、ビルドサイズとテクスチャメモリを大幅に削減できます。
ダイス背景はダイスキャラクターの実装と非常によく似ています。セットアップと使用方法については、ダイスキャラクターガイド を参照してください。
ビデオ背景
ビデオ背景は、外観を表すためにループ再生される ビデオクリップ アセットを使用します。
各プラットフォームでサポートされているビデオ形式については、ビデオソースに関するUnityドキュメント を参照してください。アルファチャンネル(透明度)付きのビデオを使用する場合は、サポートされている形式に関するガイド を参照してください。
注意
ビデオアセットのインポート設定で Transcode が無効になっている場合、一部のプラットフォームでクリップを再生できない場合があります。ビルドでビデオが再生されない場合は、トランスコードオプションを有効にしてゲームを再ビルドしてみてください。
例
シームレスなループを実現するのに問題がある場合は、ビデオの開始フレームと終了フレームがまったく同じであり、互換性のあるエンコーディング設定であることを確認してください。参考のために ビデオアクターサンプル を確認してください。
特定の外観がループしないようにするには、外観名の末尾に NoLoop(大文字と小文字は区別されません)を追加します。
WebGLの制限
WebGLでは、Unityのビデオプレイヤーはストリーミングモードでのみ動作するため、WebGLプレイヤービルド時に、すべてのビデオリソースが Assets/StreamingAssets/Backgrounds フォルダーにコピーされます。「StreamingAssets」フォルダーはビルド出力ディレクトリにも作成されます。ビルドを公開するときはそれを残したままにし、Webサーバーがこのフォルダーからのデータの読み取りを許可していることを確認してください。
コピーされたビデオファイルは、Unityによってトランスコードされません(オプションが有効になっている場合でも)。そのため、ソースファイルは最初からWebブラウザーでサポートされている形式である必要があります。または、ビルド後にゲームディレクトリ内のクリップファイルを置き換えることができます。以下は、WebGLデモで使用されている背景ビデオクリップの詳細なメタデータです。
Container : MPEG-4
Container profile : Base Media
Container codec ID : isom (isom/iso2/avc1/mp41)
Format : AVC
Format/Info : Advanced Video Codec
Format profile : High@L4
Format settings, CABAC : Yes
Format settings, RefFrames : 4 frames
Codec ID : avc1
Codec ID/Info : Advanced Video Coding
Bit rate : 3 196 kb/s
Width : 1 920 pixels
Height : 1 080 pixels
Display aspect ratio : 16:9
Frame rate mode : Constant
Frame rate : 25.000 FPS
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Progressive
Writing library : x264 core 148 r2795 aaa9aa8
Encoding settings : cabac=1 / ref=3 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=7 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=12 / lookahead_threads=2 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=1 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc_lookahead=40 / rc=crf / mbtree=1 / crf=23.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00mp4以外のビデオ形式(webmなど)を使用している場合は、リソースプロバイダー構成の Video Stream Extension プロパティを使用して、ホストされているファイルの拡張子を設定します。
ユニバーサル背景
背景を単純なスプライト以上のものにしたい場合、まず検討すべき選択肢がユニバーサル実装です。Unityで利用可能な標準レンダラー(メッシュ、パーティクル、スキニングされたスプライト、タイルマップなど)をすべてサポートします。さらに、ユニバーサルアクターのコンテンツはライトとVolumeの影響を受けます。
Create -> Naninovel -> Background -> Universal アセットコンテキストメニューを使用して、テンプレートから新しいユニバーサル背景プレハブを作成し、ダブルクリックしてプレハブ編集モードに入ります。ルートオブジェクトには Universal Background Behaviour コンポーネントがあります。これはNaninovelとプレハブコンテンツの間のアダプターです。
このプレハブはUnityの他のプレハブと同じように構築できます。Naninovelはプレハブルート以下にある互換性のあるすべてのレンダラーを取得し、実行時に背景用のレンダーテクスチャに合成します。コンポーネントの On Appearance Changed イベントを使用すると、外観の変更に対するコールバックを設定できます。たとえば、Unityの Animator システムを使用して背景のアニメーションを制御できます。
ユニバーサルアクターに含めたいオブジェクトが2Dライトやプロシージャル描画などのカスタムレンダリング機能を使用している場合は、コンポーネントに Naninovel.IUniversalActorDrawable インターフェースを実装し、そのコンポーネントをカスタムコンテンツを含むゲームオブジェクトにアタッチすることで互換性を持たせることができます。たとえば、Live2Dアクター はこの方法で実装されています。
レイヤー背景
レイヤー実装は ユニバーサル をベースにしており、Layered Actor Controller コンポーネントも備えています。このコンポーネントを使用すると、複数のスプライト(レイヤー)から背景を構成し、実行時にシナリオスクリプトを介して個別に切り替えることができます。
レイヤー背景プレハブを作成するには、Create -> Naninovel -> Background -> Layered アセットコンテキストメニューを使用します。プレハブ編集モード に入ってレイヤーを構成します。いくつかのレイヤーとグループがデフォルトで作成されます。それらを使用することも、削除して独自のものを追加することもできます。
レイヤー背景は レイヤーキャラクター と非常によく似ています。セットアップ方法やシナリオスクリプトを介した制御方法の詳細については、そちらのドキュメントを参照してください。
@back コマンドのプライマリパラメーターには外観とトランジションタイプを指定する(@char コマンドのようなIDと外観ではない)ことを忘れないでください。したがって、レイヤー合成式は次の方法で指定してください。
; 「LayeredForest」背景アクターがあるとします
@back Group>Layer,Other/Group+Layer,-RootLayer.TransitionType id:LayeredForest汎用背景
汎用背景は、最も柔軟な背景アクター実装です。ルートオブジェクトに Generic Background Behaviour コンポーネントをアタッチしたプレハブを使用します。外観の変更やその他すべての背景パラメーターは Unityイベント として渡されるため、基になるオブジェクトの動作を自由に実装できます。
注意
汎用アクター実装は、シナリオスクリプトからのイベントを転送するだけです。外観や可視性の変更コマンドへの反応、アスペクト比の変更への対応の有無や方法など、実際の動作はユーザーが実装する必要があります。アクター関連の機能のほとんどが、汎用実装で自動的に機能することを期待しないでください。
テンプレートから汎用背景プレハブを作成するには、Create -> Naninovel -> Background -> Generic アセットコンテキストメニューを使用します。
汎用背景は汎用キャラクターと非常によく似ています。使用例として、アニメーション付きの3Dモデルを汎用キャラクターとして設定するチュートリアルビデオをご覧ください。このビデオは古いバージョンのNaninovelで収録されているため、一部のプロパティ名やコンポーネント名が現在とは異なります。最新情報については、上記のドキュメントを参照してください。
ヒント
Unityの Animator コンポーネントは、ゲームオブジェクトが同じフレームで有効化/無効化されたときに SetTrigger の登録に失敗する可能性があります。可視性の変更を処理するために GameObject.SetActive を使用する場合(上記のチュートリアルで示されているように)、代わりにレンダラーを持つ子オブジェクトを有効化/無効化することを検討してください。
例
アニメーション化されたスプライトをホストするために汎用背景実装が使用されている 汎用アクターサンプル を確認してください。
シーン背景
シーン背景実装を使用して、Unityシーン を背景として使用できます。
シーン背景の構成には、デフォルトで Assets/Scenes に設定された Scene Path Root オプションがあります。これは、アクターのシーンアセットが配置されていることが想定されるディレクトリです。変更することも(たとえば、アクターごとに個別のフォルダーを指定するなど)、そのままにしておくこともできます。
注意
シーン背景のリソース(外観)名は、ルートを基準としたシーンアセットの相対パスと一致している必要があります。たとえば、シーンルートが Assets/Scenes で、Assets/Scenes/Sphere.unity および Assets/Scenes/Sub/Cylinder.unity シーンアセットがある場合、関連する外観はそれぞれ Sphere および Sub/Cylinder になります。
指定されたルートフォルダーの下に新しいシーンを作成(または既存のシーンを移動)し、シーン内のルートゲームオブジェクトに少なくとも1つの カメラ コンポーネントがアタッチされていることを確認してください。シーン背景をロードすると、Naninovelはシーン内で最初に見つかったカメラにレンダーテクスチャを割り当てます。その後、レンダーテクスチャは、Naninovelシーン空間内でシーン背景を表す背景スプライトに割り当てられます。これにより、シーン背景は他の背景およびキャラクターアクターと共存でき、すべての背景トランジションエフェクトをサポートし、さまざまなディスプレイアスペクト比を処理するようにスケーリングできます。
シーンオブジェクトは、同時にロードされる可能性のある他のシーン(たとえば、単一のシナリオスクリプトで参照されている場合)のオブジェクトと重ならないように、ワールド空間内で配置してください。さらに、シーン背景オブジェクトがグローバル空間の原点(x0 y0 z0)の近くに配置されている場合、Naninovelのメインカメラによってレンダリングされる可能性があることに注意してください。これを防ぐには、すべてのシーンオブジェクトをグローバル原点からオフセットするか、Configuration -> Engine -> Override Objects Layer を使用して、レイヤー でNaninovel関連オブジェクトを分離します。
シーンのセットアップが完了したら、Naninovel -> Configuration -> Backgrounds メニューから新しい背景アクターを作成し、SceneBackground 実装を選択して、シーンアセットをアクターリソースに追加します。
シーン背景アクターのリソースを割り当てると、対応するシーンアセットが ビルド設定 に自動的に追加されるはずです。シーンアセットがビルドに追加されていないというエラーが発生した場合は、手動で追加してみてください。
これで、@back コマンドを使用して、作成されたシーン背景アクターを制御できます。例:
; 「Sphere」Unityシーンのコンテンツを含む「Scene」背景アクターを表示します。
@back Sphere id:Scene
; 「RandomCircleReveal」エフェクトを使用してアクターを「Sub/Cylinder」に遷移させます。
@back Sub/Cylinder.RandomCircleReveal id:Sceneヒント
Unityシーンで背景を作成する場合、外観ごとに複数のシーンを作成するのではなく、シーンの状態を制御する(たとえば、ライトの色を変更して時間帯を変えたり、カメラを動かして視点を変えたりする)カスタムコマンド を追加することを検討してください。これにより、複数のシーンがロードされたときに重なりを防ぐためにオブジェクトの位置を追跡する必要がなくなります。
例
シーン背景サンプル で、シーン背景のセットアップ例を確認できます。
テクスチャへのレンダリング
汎用以外のすべての実装で、キャラクターおよび背景アクターをテクスチャアセットにレンダリングできます。このテクスチャは、カスタムUI、プリンター、マテリアル、その他の互換性のあるソースに割り当てられます。背景アクターをテクスチャにレンダリングする設定方法は、キャラクターの場合と非常によく似ています。詳細と例については、ガイドを確認してください。