サンプル
Naninovelパッケージには、ビジュアルノベルとダイアログモードのシナリオを使い始めるのに役立ついくつかの 必須サンプル がすでに含まれていますが、一般的な開発ユースケースを示すための追加の専門的なサンプルコレクションも提供されています。これらのサンプルにアクセスする方法と、それぞれの簡単な説明については、以下をお読みください。
サンプルへのアクセス
高度なサンプルは エンジンのモノレポ でホストされています。リポジトリにアクセスするには、Naninovelライセンスを登録 し、ダッシュボードの指示に従ってGitHubユーザーを割り当ててください。アクセス権を取得したら、リポジトリを クローン するか、ダウンロード してください。
ダウンロードしたリポジトリを解凍し、Unityエディタで unity/samples ディレクトリを開きます。NaninovelはPackage Managerでローカルパッケージとして参照されます。ローカルパッケージソースは、Unity拡張機能のソースコードを含む unity/client を指しています。サンプルで使用される他のサードパーティパッケージは、便宜上プロジェクトに埋め込まれています。
Unityエディタに入ったら、Assets/Scenes/Main.unity シーンを開き、プレイモードに入ります。デモプロジェクト のタイトル画面が表示されます。デモを開始するか、「SAMPLES」ボタンをクリックして、以下に概説する利用可能なサンプルに移動できます。
Addressable
このサンプルは、Addressableプロバイダー を使用して(リソースエディタメニューを使用せずに)Naninovelリソースを手動で登録し、リモートホストからアセットを提供する方法を示しています。
サンプルプロジェクトのリソースのほとんどは、リソースマネージャーメニューで割り当てられていないことに注意してください。
—それでも、シナリオスクリプトでは同じ方法でアクセスできます。
@back Snowこれは、アセットにNaninovelリソースアドレスとラベルが割り当てられているために機能します。
Perspective Scene
このサンプルは、複数のアニメーション環境スプライト、パースペクティブモードでのカメラレンダリング、およびボケ(被写界深度)効果で満たされた汎用背景を示しています。背景は Content/Backgrounds/Perspective ディレクトリに保存されています。
コンパイラのローカライズ
サンプルプロジェクトでコンパイラのローカライズを有効にするには、Scripts 構成の Compiler Localization フィールドに Profiles/Naninovel/CompilerRU アセットを割り当てます。その後、UnityエディタとVS Code拡張機能を再起動します。これで、VS Codeでプロジェクトを開き、Compiler Localization サンプルシナリオを実行できます。
E2E
E2E Tests サンプルは、自動化されたエンドツーエンドテスト スイートをセットアップし、利用可能なAPIのほとんどを使用する方法を示しています。
テストスクリプトは Scripts/E2E フォルダの下に保存されています。フォルダに配置された .asmdef ファイルに注意してください。これは、Unityテスト環境でテストソースをコンパイルするために必要です。また、Packages/manifest.json ファイルの testables エントリにも注意してください。これにより、テストアセンブリがUnityのテストランナーに公開されます。
ジェネリックアクター
Content/Backgrounds/Beach、Content/Backgrounds/Perspective 汎用背景 および Content/Characters/Kohaku/K3D 汎用キャラクター を見つけて、UnityのAnimatorで作成された3Dモデルとアニメーションを使用して汎用アクター実装をセットアップおよび使用する方法を確認してください。
入力リバインド
ドキュメント: https://naninovel.com/guide/input-processing.html#input-system
プレイヤーがデフォルトのコントロールを変更できるようにする入力リバインドUIの例は、Content/UI/InputRebind フォルダにあります。これは、Input Systemパッケージにバンドルされている「Rebind UI」サンプルに基づいています。詳細については、Unityドキュメント を参照してください。
インテグレーション
3Dアドベンチャーゲームの組み込みダイアログシステムと、切り替え可能なスタンドアロンノベルモードの両方として使用されるNaninovelを示すサンプルプロジェクト。
すべてのプロジェクト固有のサンプルスクリプトは Scripts/Runtime/Integration フォルダに保存されています。
Naninovelは、Integration シーンにある SetupGame GameObjectにアタッチされた SetupGame.cs スクリプトを介して手動で初期化されます(エンジン構成メニューで自動初期化が無効になっています)。
トリガーのコンポーネントとして使用される DialogueTrigger.cs スクリプトは、プレイヤーがトリガーコライダーに当たったときにダイアログモードに切り替えます。
SwitchToNovelMode.cs カスタムコマンドは、C#とシナリオスクリプトの両方からノベルモードに切り替えるために使用されます。
SwitchToAdventureMode.cs カスタムコマンドは、ノベルモードからアドベンチャーモードに戻すために使用されます。
インベントリ
インベントリシステムはビジュアルノベルの範囲外ですが、統合方法に関する多くのリクエストや質問を受け取りました。インベントリサンプルは、エンジンのソースコードを変更せずにNaninovelインストールの上にセットアップできるインベントリ拡張機能を作成および統合する例です。
NOTE
インベントリはスタンドアロン製品ではなく、Naninovelの一部でもありません。エンジンを拡張およびカスタマイズする方法を学ぶために使用してください。ただし、インベントリシステムの実用的なソリューションであるとは期待しないでください。探している場合は、Asset Storeを確認する か、ゼロからカスタムのものを作成してください。
このサンプルプロジェクトは、グリッドレイアウト、ページネーション、ドラッグアンドドロップウィンドウを備えたカスタムインベントリUIの作成方法、カスタムエンジンサービスと関連する構成メニューの追加、入力バインディングの追加、状態のアウトソーシングの使用、カスタムシナリオコマンドと式関数の作成方法を示しています。
テンプレートから既製のインベントリUIを作成するには、Create -> Naninovel -> Inventory -> Inventory UI アセットコンテキストメニューを使用します。次に、エディタで Naninovel -> Resources -> UI を介してプレハブをNaninovel UIリソースに追加します。追加されると、UIは他のすべてのUIと同様に、@showUI および @hideUI コマンドで表示/非表示にできます。
Inventory UIコンポーネントには Capacity プロパティがあり、インベントリのスロット数を変更できます。スロットグリッドは、Content/InventoryGrid GameObjectを介して構成されます(スロット数とレイアウト、ページごとのスロットなど)。ウィンドウのドラッグアンドドロップ動作は、Content GameObjectにアタッチされた Drag Drop コンポーネントを介して構成(または無効化)できます。
インベントリアイテムプレハブは、Create -> Naninovel -> Inventory -> Inventory Item アセットコンテキストメニューを使用して作成できます。次に、アイテムプレハブをエディタで Naninovel -> Resources -> Inventory を介してインベントリリソースとして割り当てる必要があります。
アイテムが多く、エディタメニューから割り当てるのが不便な場合は、Resources/Naninovel/Inventory フォルダにドロップすると、自動的にエンジンに公開されます。さらにサブフォルダで整理することもできます。この場合、シナリオスクリプトで参照するときはスラッシュ(/)を使用します。たとえば、Resources/Naninovel/Inventory/Armor/FullPlate.prefab として保存されているアイテムは、スクリプトで Armor/FullPlate として参照できます。
Addressable Asset System を使用してリソースを手動で公開することも可能です。アセットを公開するには、上記の方法で使用するパスと同じアドレスを割り当てますが、Resources/ 部分は省略します。たとえば、FullPlate.prefab アイテムを公開するには、プレハブにアドレス Naninovel/Inventory/FullPlate を割り当てます。Addressableプロバイダーはデフォルトではエディタで使用されないことに注意してください。リソースプロバイダー構成メニューで Enable Addressable In Editor プロパティをオンにすることで有効にできます。
各アイテムには、単一のインベントリスロットにスタックできるこのタイプのアイテムの数を制限する Stack Count Limit プロパティと、アイテムが使用されたとき(@useItem コマンドを介して、またはユーザーがインベントリ内のアイテムをクリックしたとき)に呼び出される On Item Used Unityイベントがあります。以下は、Play Script コンポーネントを使用してイベントを設定し、アイテムが使用されたら削除し、グリッチ特殊効果を生成し、テキストメッセージを表示する例です。
@addItem コマンドを使用してインベントリにアイテムを追加し、@removeItem(または @removeItemAt、@removeAllItems)を使用して削除できます。アイテムIDはアイテムプレハブ名と同じです。インベントリスロットIDはグリッドスロットインデックスと同じです(例:最初のスロットは0、2番目は1など)。
アイテムがインベントリに存在するかどうかを確認し、既存のアイテムの数を取得するための itemExist() および itemCount() カスタム 式関数 も便利です。
以下はサンプルプロジェクトのスクリプトです。
# Start
Select an action.[>]
@choice "Pick up sword" lock:itemExist("Sword")
@addItem Sword
@choice "Pick up armor" lock:itemExist("Armor")
@addItem Armor
@choice "Adventure awaits, venture forth!"
# Adventure
@if itemExist("Sword")
@set monstersSlayed={ itemExist("Armor") ? random(3,5) : 2 }
@addItem Food amount:{monstersSlayed}
You've encountered and slayed {monstersSlayed} monsters with your sword.
@goto #Start
@else
But you don't have a weapon! You've been beaten by the monsters.
@goto #StartLive2D
サンプルは、NaninovelでLive2Dキャラクターを使用する方法を示しています。Content/Characters/Hiyori および Content/Characters/Senko ディレクトリで見つけてください。
ローカライズ
- 生成されたローカライズドキュメントは
Profiles/Naninovel/Resources/Naninovel/Localizationディレクトリに保存されます。 - 生成されたシートは、サンプルプロジェクトルートの下の
Sheetsディレクトリに保存されます。 - ローカライズ固有のフォントは
Profiles/Naninovel/Resources/Naninovel/Fontsに保存されます。
ローカライズツール用に選択されたフォルダ:
| フォルダ | パス |
|---|---|
| Script Folder (input) | Assets/Scripts/Scenario |
| Text Folder (input) | Assets/Profiles/Naninovel/Resources/Naninovel/Text |
| Locale Folder (output) | Assets/Profiles/Naninovel/Resources/Naninovel/Localization |
スプレッドシートツール用に選択されたフォルダ:
| フォルダ | パス |
|---|---|
| Input Scripts Folder | Assets/Scripts/Scenario |
| Input Text Folder | Assets/Profiles/Naninovel/Resources/Naninovel/Text |
| Input Localization Folder | Assets/Profiles/Naninovel/Resources/Naninovel/Localization |
| Output Folder | Sheets |
マップ
このサンプルは、C#スクリプトなしでインタラクティブマップを実装する方法を示しています。
マップは Content/UI/Map に保存されたカスタムUIとして実装されています。場所はUIに配置された通常のUnityボタンです。
ボタンのクリックおよびホバーイベントは、Naninovelの Play Script コンポーネントによって処理されます。
場所の可用性は、ボタンにアタッチされた Variable Events コンポーネントで制御されます。
RTL
RTLプリンターは Content/Printers/RTL に保存されています。
アクターシェーダー
この例は、カスタムトランジションエフェクトを追加するためのテクスチャシェーダーと、ライティングおよび自己照明をサポートするスプライトシェーダーを作成および使用する方法を示しています。後者は、背景アクターの時刻をシミュレートするために使用されます。
カスタムシェーダーは Scripts/Shaders ディレクトリに保存されています。
背景テクスチャには、アルファレイヤーに保存された自己照明マスクがあり、カスタムシェーダーがグローバルライトを無視しながら発光すべき領域を評価するために使用されます。
時刻は Scripts/Runtime/Shader/TimeOfDay.cs で制御され、24時間の任意の時点でライトの色と放射強度を構成できます。
コンポーネントAPIは Scripts/Runtime/Shader/SetHour.cs カスタムコマンドを介してシナリオスクリプトに公開されており、@hour コマンドで時間を設定できます。例:
; 現在の時刻を3秒かけて18:00 (午後6時) に設定します。
@hour 18 duration:3Spine
サンプルは、NaninovelでSpineキャラクターを使用する方法を示しています。Content/Characters/Spine ディレクトリで見つけてください。
UI
サンプルには、新しいカスタムおよび変更された組み込みUIの次の例が含まれています。
- タイトル画面
- 音楽ギャラリー
- クレジット
- チャットプリンターのタイムスタンプ
- カスタム選択肢ハンドラー
- 表示されるメッセージ内の絵文字
- 表示されるメッセージ内のフォントバリアント
- カレンダー
すべてのサンプルUIは Content/UI に保存されています。
レイヤーアクター
Content/Characters/Miho ディレクトリにあるレイヤーキャラクターと、Content/Backgrounds/Particles にあるカメラレンダリングモードで設定されたレイヤー背景を見つけてください。
ダイスアクター
Content/Characters/Kohaku/Diced にあるダイスキャラクターとアトラスを見つけてください。
ビデオアクター
ビデオ背景は Content/Backgrounds/Video ディレクトリに保存されており、ビデオアクターは Content/Characters/Ball ディレクトリにあります。
シーン背景
Content/Backgrounds/Scene ディレクトリにあるシーン背景を見つけてください。
トランジションエフェクト
Scripts/Scenario/Transitions シナリオスクリプトで、すべての利用可能なトランジションエフェクトが順番に適用されるデモを見つけてください。
オートボイス
ENおよびJAロケールのボイスクリップは Content/Audio/Voice の下に保存されています。
"AUTO VOICING" サンプルに入り、ゲーム設定で音声言語を切り替えてみてください。
ミュージックイントロ
トラックのベース部分をループする前にイントロ部分を1回再生するように、@bgm コマンドの intro パラメータを使用する方法を示します。
背景のマッチング
背景マッチング機能のデモ。アスペクト比の異なる背景を表示ビューポートに一致させる方法を示しています。
ビジュアルスクリプティング
Visual Scripting(以前はBoltと呼ばれていました)は、Unity 2021.2以降にデフォルトでバンドルされている組み込みパッケージです。プログラマーも非プログラマーもコードを書かずに使用できるユニットベースのグラフを使用して、ゲームやアプリケーションのロジックを作成できます。
まず、互換性のあるUnityバージョン(2021.2以降)を使用していること、および Visual Scripting パッケージがPackage Managerにインストールされていることを確認してください。
Visual Scriptingプロジェクト設定にある Node Library リストに Elringus.Naninovel.Runtime ライブラリを追加します。これは、エンジンの型とAPIをビジュアルスクリプティンググラフに公開するために必要です。
Visual Scriptingは、ライブラリから使用可能なすべての型を自動的に公開しないため、同じ設定メニューの Type Options リストに必要なNaninovel型を追加します。以下の例では、Engine、Script Player Interface、および Script Player Extensions を追加しましたが、他の エンジンサービスインターフェイス や構成など、より多くの型が必要になるでしょう。
変更を適用するには、ライブラリとタイプを追加した後、ユニットを再生成することを忘れないでください。
Visual Scripting設定でNaninovelライブラリとタイプが追加されると、エンジンAPIがグラフビューの下のファジーファインダーで使用できるようになり、他のUnityまたはサードパーティAPIと同様に使用できます。以下は、エンジンを初期化してスクリプトを再生する例です。この例を試す前に、必ず Initialize On Application Load を無効にし、Title UI を削除してください。
シナリオスクリプトからビジュアルスクリプティンググラフまたはステートマシンにイベントを送信する場合は、以下に示す カスタムコマンド の例を使用します。これは、指定された名前のGameObjectを見つけ、指定された名前と引数でイベントを送信しようとします。
[Serializable, Alias("bolt")]
public class BroadcastBoltEvent : Command
{
[Alias("object"), RequiredParameter]
public StringParameter GameObjectName;
[Alias("name"), RequiredParameter]
public StringParameter EventName;
[Alias("args")]
public StringListParameter Arguments;
public override Awaitable Execute (ExecutionContext ctx)
{
var gameObject = GameObject.Find(GameObjectName);
if (!gameObject)
{
Debug.LogError($"Failed to broadcast '{EventName}' bolt event: '{GameObjectName}' game object is not found.");
return Async.Completed;
}
CustomEvent.Trigger(gameObject, EventName, Arguments);
return Async.Completed;
}
}内容をプロジェクトのAssetsディレクトリ内の任意の場所に保存された新しいC#スクリプトにコピー&ペーストするだけで、コマンドが自動的に使用可能になり、次のように使用できます。
; 提供された引数を使用して "MyEvent" を "ExampleEvent" ゲームオブジェクトに送信します
@bolt object:ExampleEvent name:MyEvent args:ExampleMessage,Script002以下は、ExampleEvent GameObjectにアタッチされたときに、メッセージを表示して指定されたスクリプトの再生を開始するグラフの例です。