Skip to content

インベントリ

インベントリシステムはビジュアルノベルスタイルのゲームでは少し範囲外ですが、Naninovelで活用する方法について多くの問合せがありました。GitHubプロジェクト ↗ には、インベントリをエンジンや拡張機能として作成し統合する例があります。Naninovel上で簡単にセットアップできます。

サンプルプロジェクトは、グリッドレイアウト、ページネーション、ドラッグドロップウィンドウといったカスタムインベントリUIを作成する方法、カスタムエンジンサービスと関連するコンフィグメニューを追加する方法、入力バインディングを追加する方法、ステートのアウトソーシングを使用する方法、カスタムシナリオコマンドと式関数を作成する方法を示しています。

cover

Git clientでリポジトリをクローン ↗ するか zipファイルをダウンロード ↗ することができます。

WARNING

プロジェクトに Naninovel パッケージは含まれないため、初めて開く際はコンパイルエラーが発生します。問題を解決するには、アセットストアから Naninovel をインポートします。

インストール

既存のUnityプロジェクトの上にインベントリ拡張機能を設定するには、UPM ↗ を使用して、次のgit URL経由でパッケージをインストールします: https://github.com/Naninovel/Inventory.git?path=Assets/NaninovelInventory またはNaninovelInventory.unitypackage ↗ を手動でダウンロードしてインポートします。

cover

使い方

テンプレートから既製のインベントリUIを作成するには、アセットコンテキストメニューの Create -> Naninovel -> Inventory -> Inventory UI を使用します。次にエディターメニューの Naninovel -> Resources -> UI から、プレハブをNaninovel UIリソースに追加します。追加すると、@showUI@hideUI コマンドで、他のすべてのUIと同様にUIを表示/非表示にすることができます。

インベントリUIコンポーネントには Capacity プロパティがあり、インベントリのスロット数を変更できます。スロットグリッドは、 Content/InventoryGrid ゲームオブジェクトで設定します(スロット番号とレイアウト、ページごとのスロットなど)。ウィンドウのドラッグドロップ動作は、Contentゲームオブジェクトに紐づいた Drag Drop コンポーネントで設定(無効化)できます。

インベントリアイテムプレハブは、アセットコンテキストメニューの Create -> Naninovel -> Inventory -> Inventory Item で作成できます。アイテムのプレハブは、エディターメニュー Naninovel -> Resources -> Inventory からインベントリリソースとして割り当てる必要があります。

cover

大量のアイテムがありエディターメニューから割り当てるのが大変な場合は、Resources/Naninovel/Inventory フォルダーにドロップするだけで自動的にスクリプトで使用できるようになります。必要に応じて、さらにサブフォルダで整理することもできます。この場合、naninovelスクリプトで参照する場合はスラッシュ (/) を使用します。たとえば、Resources/Naninovel/Inventory/Armor/FullPlate.prefab として保存されたアイテムは、Armor/FullPlate としてスクリプトから参照できます。

addressable asset system を使用して手動でリソースを公開することもできます。アセットを公開するには、使用するパスと同じアドレスを "Resources/" の部分を除いて、上記の方法で割り当てます。例えば、アイテム "FullPlate.prefab" を公開するには、次のアドレスにプレハブアセットを割り当てます: Naninovel/Inventory/FullPlate。addressable 機能はデフォルトではエディターで使用できないことに注意してください。リソースプロバイダーのコンフィグメニューで Enable Addressable In Editor プロパティを有効にすることで許可できます。

各アイテムには、同じタイプのアイテムを1つのインベントリスロットにスタックできる数を制限する Stack Count Limit プロパティと、アイテムが使用されたとき(@useItem コマンドまたはユーザーがインベントリ内のアイテムをクリックしたとき)に呼び出される On Item Used Unityイベントがあります。以下の例は、Play Script コンポーネントを使用してイベントを設定し、一度使用したアイテムを削除し、グリッチの特殊効果を生成してテキストメッセージを出力する方法です。

cover

@addItem コマンドでアイテムをインベントリに追加し、@removeItem(または@removeItemAt@removeAllItems)でアイテムを削除できます。アイテムIDは、アイテムのプレハブ名と同じです。 インベントリスロットIDはグリッドスロットインデックスと同じです(たとえば、最初のスロットは0、2番目は1)。

カスタム 関数式 ItemExist()ItemCount() でアイテムが在庫に存在するかどうか、および既存のアイテムの数を確認でき、便利です。

以下は、サンプルプロジェクトのスクリプトです:

nani
# Start

Select an action.[skipInput]

@choice "Pick up sword" if:!ItemExist("Sword") do:"@addItem Sword, @goto .Adventure"
@choice "Pick up armor" if:!ItemExist("Armor") do:"@addItem Armor, @goto .Adventure"
@choice "Adventure awaits, venture forth!"
@stop

# 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.[if !ItemExist("Armor")] You could've been more productive with an armor, though.[endif][i][showUI Inventory wait:false] Check your inventory for the loot!
	@goto .Start
@else
	But you don't have a weapon! You've been beaten by the monsters.[if ItemExist("Armor")] At least it didn't hurt that much, thanks to the armor.[endif] Let's prepare better next time.
	@goto .Start
@endif