《UIS》 第 2 篇 編輯器與資料庫設定
本篇文章、圖片出處來自 Ultimate Inventory System
軟體版本與本翻譯文件可能會有落差,本翻譯文件僅供參考。
本譯文為本站譯者原創翻譯內容,文字著作權歸本站所有。
未經授權,請勿任意轉載、改作或商業使用。
編輯器與資料庫設定
v1.1 版本 1.1 升級指南
版本 1.1 帶來了大量改進,重點在於使用者介面。目標是建立一套模組化且靈活的系統,讓使用者可以自由混搭功能來打造專屬的庫存 UI。由於這需要完全重寫整個 UI 系統及其所有元件,1.0.x 版本的 UI 與新系統不相容,因此從舊版升級需要以下步驟。
升級步驟
1. 移除版本 1.0.x
由於許多腳本已被重新命名或移除,Unity Package 對這類變更的處理不太理想。請先完整移除 1.0.x 版本,再匯入 1.1 版本。
2. 檢查場景與 Prefab 的遺失元件
由於許多腳本已被重新命名、替換或刪除,部分 GameObject 或 Prefab 可能需要修復。
3. 選單與面板(Menus & Panels)
如果你的選單或面板是從範例場景複製而來,強烈建議將其移除,並使用 UI Designer 從頭重建。這是因為為了讓 UI 系統更具擴展性,所做的改動幅度相當大。
4. Item Box → Item View / Attribute Box → Attribute View
Item Box、Attribute Box 等元件現在統一改名為 Item View、Attribute View 等。View 系列元件用來顯示特定物件,通常(但非必要)位於 View Slot(如 Item View Slot)中,View Slot 是一種自訂的 Selectable,可偵測點擊、拖曳、選取等互動事件。
5. 元件序列化結構異動
系統現在使用一些方便的結構體(Struct)來序列化資料庫中的物件,讓系統在物件不屬於正確資料庫時可以自動替換。這些結構體包括 Dynamic Item Category、Dynamic Currency、Dynamic Crafting Recipe 等。
由於此項變更,所有在 Inspector 中設定的類別都必須重新指派,包括:Item Slot Set、Category Item Actions、Category Item View Set 等。
6. Category Item Actions → Item Action Set
為避免 Category Item Actions 和 Category Item Action Sets 之間的混淆,Category Item Actions 已更名為 Item Action Set。
7. Equipper & Usable Equipped Items Handler
Equipper 不再負責「使用」物品,它只負責在視覺上裝備物品。Usable Equipped Items Handler 是負責監聽 Inventory Input 事件以使用 Item Object Behaviours 的元件。將此元件加在 Equipper 旁邊,並參照 Item User 即可。
8. 其他改名項目
| 舊名稱 | 新名稱 | 說明 |
|---|---|---|
| Item Object Action | Item Object Behaviour | 更名以避免與 Item Actions 混淆 |
| Usable Item Object | Item Object Behaviour Handler | 改用組合(Composite)關係取代繼承 |
| Item Pickup Visual Listener | Item Object View | 改為依賴 Item Object 事件;也支援在 Item Object 上設定 World Canvas UI 的 Item View |
9. 使用新功能的 API 範例
版本 1.1 提供了全新的 API,可透過 Inventory System Manager 取得 Inventory 和 Display Panel Manager:
// 透過 Inventory Identifier 取得 Inventory(可在程式碼任意位置呼叫)
var inventory = InventorySystemManager.GetInventoryIdentifier(1).Inventory;
// 以名稱新增物品
inventory.AddItem("potion", 3);
// 取得 Display Panel Manager
var displayPanelManager = InventorySystemManager.GetDisplayPanelManager(1);
// 以名稱開啟 Display Panel
displayPanelManager.OpenPanel("Main Menu");
v1.2 版本 1.2 升級指南
版本 1.2 的改進重點在於穩定性與功能完整性,同時針對社群功能需求做了大量改進,並強化了與 Opsive Ultimate Character Controller 的整合。部分 UIS 1.1.x 的元件可能與新系統不相容。
升級步驟
1. 移除版本 1.1.x(含 Shared 資料夾)
請將 1.1.x 版本完整移除,包含 Shared 資料夾,再匯入 1.2 版本。如果你也擁有角色控制器(Character Controllers),請同時重新安裝,因為它包含 UIS 外部的共用腳本。
2. 檢查場景與 Prefab 的遺失元件
部分腳本已被重新命名、修改或刪除,請逐一檢查你的 GameObjects 和 Prefabs。
常見錯誤:TMPro could not be found
若遇到此錯誤,請找到 Shared 資料夾和 UIS 的 Assembly Definition,確認它們有參照 TextMeshPro 的 Assembly Definition(Unity.TextMeshPro)。Assembly Definition 位於:
Assets/Opsive/Shared/Opsive.Shared
Assets/Opsive/UltimateInventorySystem/Scripts/Opsive.UltimateInventorySystem
1.2 版主要新功能
1.2 版潛在的破壞性變更
函式重新命名
| 舊名稱 | 新名稱 | 影響範圍 |
|---|---|---|
| AddItemCondition | CanAddItem | Inventory、Item Collection、Restriction 類別 |
| RemoveItemCondition | CanRemoveItem | Inventory、Item Collection、Restriction 類別 |
腳本移除 / 重新命名
- Audio Manager:現為 UIS 和 Character Controllers 的共用檔案,功能更強大。
- FixedSizeItemCollection:已移除,改用 Item Restriction Object 來限制庫存或 Item Collection 中的物品數量。
編輯器視窗(Editor Window)
規劃你的資料庫
在建立任何庫存物件之前,建議先思考好如何組織庫存。首先要考慮的是 Item Categories——它是最重要的庫存物件,決定了資料庫的結構、所有物品的屬性,以及每種物品可執行的動作。
確定好 Categories 之後,下一步是建立 Item Definitions——物品的模板。Item Definition 定義了所有同定義物品實例共享的屬性,不同實例可以有不同的屬性值。
新增物件
建立資料庫時,系統會自動給予一個 Uncategorized 的 Item Category 和 Crafting Category,這兩個不能被刪除。在編輯器中建立的 Item Definitions 如果尚未設定 Category,會先被歸入 Uncategorized,Crafting Recipes 也同理。
在各自的編輯器頁面中,於「Add」按鈕旁的欄位輸入名稱即可新增物件。搜尋列和排序功能可以幫助你快速找到物件。在物件建立後,它會以 ScriptableObject 的形式儲存,並在資料庫中保留參照。大多數相關物件(例如 Item Definition 和其 Item Category)會互相持有對方的參照。
刪除物件
刪除物件可能產生連鎖影響,以下說明各種情況:
刪除 Item Category
- 被刪除類別與子類別之間的連結會斷開,若有父類別則父類別會直接連接子類別。
- 子類別會保留被刪除類別所「要求」的屬性。
- 直接屬於被刪除類別的 Item Definitions,會被改為歸屬於其子類別或父類別;若兩者皆不存在,則歸入 Uncategorized。
- 若在執行期間刪除類別,所有屬於該類別的 Item Definitions 和 Items 都會被取消註冊。
刪除 Item Definition
- 被刪除定義與其子定義之間的連結會斷開,子定義會改為以被刪除定義的父定義作為新的父定義。
- 若在執行期間刪除,所有屬於該 Item Definition 的 Items 都會被取消註冊。
刪除 Item
刪除 Item 不需要額外清理,Item Categories 和 Item Definitions 不依賴 Item。若有 MonoBehaviour 依賴該 Item,Item Object 元件會在物品移除前觸發事件函式,讓額外的清理邏輯得以執行。
搜尋、篩選與排序
物件清單面板提供搜尋列,支援排序下拉選單和篩選預設。除了名稱搜尋,Item Category 還支援以下特殊搜尋 Token:
| Token | 說明 |
|---|---|
| c:<categoryName> | 篩選所有以指定類別為直接父類別的 Category |
| i:<categoryName> | 篩選所有繼承自指定類別(包含間接祖先)的 Category |
| a:<AttributeName> | 篩選所有擁有指定屬性名稱的 Category |
+ 按鈕建立後加入搜尋欄,每次開啟 Editor Window 都會自動套用,非常適合管理以「平面清單」顯示的大量物件。
進階篩選:自訂 SearchFilterPreset
繼承 SearchableListFilterPreset 類別並覆寫 IsValid 方法,即可建立自訂的進階搜尋條件:
/// <summary>
/// 用於可搜尋清單的篩選與排序預設物件
/// </summary>
public class SearchableListFilterPreset : ScriptableObject
{
[Tooltip("預設搜尋字串。")]
[SerializeField] protected string m_SearchString;
[Tooltip("預設排序選項(以索引表示)。")]
[SerializeField] protected int m_SortOptionIndex;
public string SearchString {
get => m_SearchString;
set => m_SearchString = value;
}
public int SortOptionIndex {
get => m_SortOptionIndex;
set => m_SortOptionIndex = value;
}
/// <summary>
/// 回傳物件是否符合條件(字串搜尋另行處理)。
/// 可覆寫此函式以建立進階篩選條件。
/// </summary>
public virtual bool IsValid(object obj)
{
return true;
}
}
屬性編輯器(Attributes)
屬性(Attributes)是以唯一名稱定義值的物件,可以在 Item Categories、Item Definitions 和 Items 上設定不同的屬性值。屬性只能從 Item Category 中建立,建立後會向下傳遞給屬於該類別的所有 Item Definitions 和 Items。
可以把 Item Category 的屬性定義想成「變數宣告」,而 Item Definitions 和 Items 上的屬性則是「取得或設定這個變數的值」。
屬性列表欄位說明
屬性列表顯示每個屬性的名稱、型別和數值(模型、Prefab、Sprite 以外的值以文字呈現)。屬性名稱旁有兩個顏色方塊:
- 左方色塊:表示屬性的來源 Category,點擊可跳轉至該類別。
- 右方色塊:顯示屬性繼承自哪個物件,方塊中的字母表示繼承來源類型:
| 字母 | 繼承來源 |
|---|---|
| C | Item Category |
| S | Source(來源 Category) |
| I | Default Item |
| D | Item Definition |
Item Category 編輯器中可修改的屬性選項
| 屬性 | 說明 |
|---|---|
| Name | 屬性名稱,在該 Item Category 中必須唯一,須以字母開頭,只能包含字母、數字和底線。 |
| Type | 屬性所代表的物件類型。建立後可透過 Type 下拉選單更改,系統會建立對應的泛型屬性 Attribute<T>。若選擇自訂屬性類型則不會是泛型。可透過 Tools → Opsive → Unit Options 新增自訂類型到下拉選單。 |
| Variant |
Inherit:值由父層屬性決定。 Override:值由自訂指定值決定。 Modify:值由公式計算決定(詳見 Modify Variant 文件)。 |
| Pre-evaluate | (從屬性視圖右上角齒輪按鈕開啟)開啟後,屬性值會被快取,不會在每次存取時重新計算。對 Modify 類型的屬性最明顯。 |
| Move To | (從齒輪按鈕開啟)可以輕鬆在三個屬性集合之間移動屬性。從 Item Definition 或 Item 移往 Item Category 時,非 Item Category 屬性值將遺失;反方向移動則會保留所有子項目的值。 |
物品類別編輯器(Item Category)
Item Category 編輯器分為三個區塊:屬性(Properties)、屬性設定(Attributes)、以及關聯關係(Relationships)。
搜尋 Token
同 Editor Window 的搜尋功能,Item Category 支援 c:、i:、a: 三種前綴 Token 進行搜尋。
Properties(屬性設定)
| 屬性 | 說明 |
|---|---|
| Name | 類別名稱,同時代表 ScriptableObject 的檔案名稱,必須唯一。 |
| Mutable | 設為 Mutable 後,直屬此類別的 Items 的屬性值可在執行期間變更。設為 Immutable 可確保物品建立後不會改變,同時透過共用物品實例來節省記憶體。 |
| Unique | 設為 Unique 後,直屬此類別的 Items 在預設 Item Collection 中不會自動堆疊。Common(非 Unique)且 Mutable 的物品合併時可能遺失屬性值,請特別注意。 |
| Abstract | Abstract 類別不會出現在 Item Definitions 的類別選擇清單中,主要用於整理和組織資料庫結構。 |
| Editor Color | 在編輯器中顯示的類別顏色,純粹用於視覺化管理物件清單。 |
| Editor Icon | 在編輯器中顯示的圖示。若未指定,會使用名稱為 "CategoryIcon" 的屬性。 |
| Parents | Item Category 支援多個父類別和多個子類別。不能將自己的後代設為父類別(避免循環)。父類別的屬性名稱不能重疊(相同名稱但不同型別);若相同名稱且相同型別,第一個父類別的屬性會被優先使用。 |
Attributes(屬性集合)
Item Category 有三個屬性 Tab:
+ 新增,選取後按 - 刪除,系統會詢問你是要只移除此 Category 及其父類別的屬性,還是同時移除其子類別的屬性。
Relationships(關聯關係)
Relationships 視圖顯示與目前 Item Category 相關的物件清單,點擊名稱前的顏色方塊即可跳轉。包含以下 Tab:
- Ancestors(祖先類別)
- Descendants(後代類別)
- Direct Item Definitions(直屬 Item Definitions)
- Inherited Item Definitions(繼承的 Item Definitions)
- Direct Recipes(直接合成配方)
- Inherited Recipes(繼承的合成配方)
物品定義編輯器(Item Definition)
Item Definition 編輯器同樣分為三個區塊:Properties、Attributes 和 Relationships。
搜尋 Token
| Token | 說明 |
|---|---|
| a:<AttributeName> | 篩選所有擁有指定屬性名稱的 Item Definition |
| c:<ItemCategoryName> | 篩選所有繼承指定類別的 Item Definition |
Properties
| 屬性 | 說明 |
|---|---|
| Name | Item Definition 名稱,同時代表 ScriptableObject 檔案名稱,必須唯一。 |
| Item Category | 此 Item Definition 所屬的 Item Category。新建時預設為 Uncategorized。設定 Category 後,所有屬性才會被建立。更換 Category 時,若屬性不匹配會被移除。 |
| Parent | 父 Item Definition,必須與目前的 Item Definition 屬於相同的 Item Category。設定父定義後,屬性值會改為從父定義繼承,而非直接從 Item Category 繼承,非常適合快速建立物品變體。 |
| Editor Icon | 在編輯器中顯示的圖示。若未指定,會使用名稱為 "Icon" 的屬性。 |
Attributes
可以分別為 Item Definition 和其 Default Item 設定屬性值。Default Item 是所有以此定義建立的物品實例的模板;若物品是 Mutable 的,執行期間建立時會複製 Default Item。
Relationships
包含以下 Tab:Item Categories、Ancestors、Descendants、Direct Recipes、Inherited Recipes。
合成類別(Crafting Category)
Crafting Category 的目的是組織合成配方,並設定配方的類型。直屬於某個 Crafting Category 的所有配方,都必須在編輯器中定義配方類型(Type),且該類型必須繼承自基礎 Crafting Recipe 類型。
Crafting Category 編輯器分為兩個區塊:Properties 和 Relationships。
Properties
| 屬性 | 說明 |
|---|---|
| Name | 類別名稱,同時為 ScriptableObject 檔案名稱,必須唯一。 |
| Abstract | Abstract 類別不會出現在 Crafting Recipes 的類別選擇清單中,僅用於組織整理。 |
| Color | 僅用於編輯器視覺化管理。 |
| Recipe Type | 處理配方時使用的 Crafting Recipe 類型,允許你定義客製化的合成輸出邏輯。 |
| Parents | 支援多父多子,規則同 Item Category(不能循環,屬性名稱不重疊)。 |
| Editor Color / Editor Icon | 同 Item Category 的編輯器視覺設定。 |
Relationships
包含:Ancestors、Descendants、Direct Crafting Recipes、Inherited Crafting Recipes。
合成配方(Crafting Recipe)
Crafting Recipe 定義了合成所需的輸入材料與輸出結果。編輯器分為四個區塊:Properties、配方材料/輸出/其他設定、視覺化顯示圖,以及 Relationships。
搜尋 Token
| Token | 說明 |
|---|---|
| c:<CraftingCategoryName> | 篩選繼承指定 Crafting Category 的配方 |
Properties
| 屬性 | 說明 |
|---|---|
| Name | 配方名稱,同時為 ScriptableObject 檔案名稱,必須唯一。 |
| Category | 配方所屬的 Crafting Category。更換 Category 時,配方會轉換為新的 Recipe Type,之前的部分值可能遺失。 |
| Editor Icon | 在編輯器中顯示的圖示。 |
Recipe Definition 三個 Tab
Visual Diagram(視覺化圖)
配方的結果會在 Recipe Definition 區塊下方以視覺化圖呈現,並隨著編輯即時更新,讓你一眼看清完整配方。
貨幣編輯器(Currency)
貨幣可以用於與其他物件的交換。單一貨幣本身功能有限,但透過巢狀嵌套並設定兌換率,可以輕鬆建立多幣種系統(例如金幣 = 100 銀幣 = 10,000 銅幣)。
Properties
| 屬性 | 說明 |
|---|---|
| Name | 貨幣名稱,必須唯一。 |
| Icon | 貨幣的代表圖示,編輯器和執行期間都會使用。 |
| Base Currency | 此貨幣由哪種貨幣組成(通常是比本貨幣價值更低的貨幣)。 |
| Base Exchange Rate | 等同於本貨幣一單位的基礎貨幣數量。 |
| Max Amount | Currency Collection 中此貨幣的最大持有數量。 |
| Overflow Currency | 當本貨幣超過 Max Amount 時,超出部分會自動轉換為這個更高價值的貨幣。 |
| Fraction Currency | 當本貨幣出現小數時,小數部分會以這個更低價值的貨幣表示。 |
UI Designer
UI Designer 是用來建立所有與 UIS 相關的 UI 介面的工具。它的目標是讓開發者只需幾次點擊,就能在編輯器中建立出風格獨特的庫存 UI,這一切都要歸功於 UI Designer Schemas——一種儲存了建立 UI 所需 Prefab 和資產集合的 ScriptableObject。
入門步驟
- 前往
Tools → Opsive → Ultimate Inventory System → UI Designer開啟 UI Designer。 - 在 Setup Tab 的「Create Canvas Managers」下,點選 「Setup」 生成 Canvas 和 Display Panel Manager。
- 在「UI Designer Schema」區塊選擇喜歡的 Schema,按 「Duplicate」 進行複製。未複製時無法使用 UI Designer。
- 複製後按大型的 「Spawn In Scene」 按鈕,快速在場景中生成基本選單。
- 之後各個 Tab 都會解鎖,可以用來建立、尋找和編輯 UI。
Create 與 Edit 區塊
大多數 Tab 分為兩個部分:
- Create:必須指定 Parent Transform(UI 生成的位置),以及一些決定使用哪些 Prefab / 資產的選項。
- Edit:提供「Find Available Targets in Scene」按鈕,也可拖曳元件到欄位中選取目標。選定目標後,會顯示 UI 的資訊與編輯選項。
各 UI 元件概覽
Main Menu
Main Menu 是一個可包含子面板的元件,由 Display Panel Manager 管理,可輕鬆開啟和關閉。在建立 Inventory Grid、Save Menu、Crafting Menu 等面板時,選擇「Main Menu」Panel Option 即可將其設為 Main Menu 的子面板。
Inventory Grid(庫存格)
用來顯示庫存內容,可以顯示清單(List)或格狀(Grid)排列。建立時的可選選項:
| 選項 | 說明 |
|---|---|
| Parent Transform | Inventory Grid 生成的位置。 |
| Panel Option | Basic(簡單矩形)、Simple(帶標題欄)、Floating(可拖曳移動)、Main Menu(嵌入 Main Menu)。 |
| Inventory | 指定此 Grid 監視的 Inventory。 |
| Grid Options | Grid(格狀)或 List(單列 + 捲軸)。 |
| Grid Size & Layout Group | 格子大小與 Layout Group,需正確設定以定義格子的方向軸。Layout Group Navigation 用來設定相鄰元件的導航。 |
| Grid Navigation | 當物品數量超過格子容量時,用來捲動、分頁或分 Tab 顯示,支援滑鼠和鍵盤/控制器。 |
| Filters & Sorters | 可加入預設篩選器、搜尋列(輸入即篩選)和排序下拉選單。 |
| Grid Tabs | 由 Tab Controller 和 Tab Toggles 控制,每個 Tab 可設定不同的篩選器。 |
Item Shape Grid
讓物品在有限格子中佔用多個格位(類似《暗黑破壞神》風格的背包)。由 Item Shape Grid Controller & Data 管理,與一般 Inventory Grid 運作方式完全不同。Item Views 必須包含特定 Item View Modules 才能正確顯示。
Equipment(裝備面板)
使用 Item Slot Collection View 建立,每個裝備槽對應 Item Slot Set 中的一個 Slot,可設定各槽位只允許特定 Item Category 的物品放入。
Item Hotbar(物品快捷列)
以方便存取的方式顯示物品,支援 Item Actions 輸入觸發和拖放操作。
Shop(商店)
用於買賣物品的 UI。UI Designer 允許直接在 Shop Menu 上加入 Shop 元件、顯示商品的 Inventory Grid、顯示完整價格的 Multi Currency View,以及數量選擇器(Quantity Picker)。
Crafting(合成)
作為使用 Crafter 元件合成物品的介面。UI Designer 可以建立含配方格子(Recipe Grid)的合成選單,並支援網格大小、版面、導航和 Tab 的編輯。
Save(存檔)
由於大多數專案會使用自訂存檔方案,官方的 Save Menu 設計簡單基本。UI Designer 可以找到場景中所有 Saver 元件,顯示目前哪些內容會被存取,也可編輯格子大小、版面和導航。
Storage(倉庫)
用於在兩個 Inventory(通常是玩家與倉庫)之間互相移動物品的介面。
Chest(寶箱)
最快的方式是直接從 Demo 資料夾生成「Chest」Prefab。玩家透過 Inventory Interactor 和 Interactable 元件與寶箱互動時,Chest Menu 會自動開啟並綁定至該寶箱。
Item Description(物品說明)
Item Description 是一種特殊的 Item View,專門用來顯示物品的詳細說明。UI Designer 提供多個說明模板,並可加入或移除 Item View Modules,以及將 Item Description 綁定至某個 Item View Slots Container(顯示目前選取物品的說明)。
Currency(貨幣顯示)
使用 Multi Currency View 顯示貨幣,將 Currency 對應至 Currency View。設定 Currency Amount 或 Currency Collection 後,會顯示每種貨幣的數量。Currency Designer Tab 可從 Schema 模板建立 Multi Currency Views、Currency Views 和 Currency Owner Monitors。
Inventory Monitor
當物品被加入 Inventory 時,Inventory Monitor 會在螢幕上彈出 Item Views 顯示通知。UI Designer 會直接建立一個 Inventory Monitor 元件。
Item View & Attribute View
Item View 搭配 Item View Modules 顯示物品;Attribute View 搭配 Attribute View Modules 顯示屬性值。建立後可在 UI Designer 中新增或移除 Modules。自訂 Module 繼承對應的基礎類別後,會自動出現在下拉清單中。
Item View Slots Container(共用功能)
Inventory Grid、Item Hotbar 和 Equipment 面板都基於 Item View Slots Container,共享以下功能:Item View Drawer、Item Actions、Item Moving(拖放)、Item Description 綁定等。
- Item View Drawer:依 Item Category 對應至 Item View Prefab,決定每個物品用哪種 View 顯示。使用 Item View Slots 時需開啟「Use View Slots」選項,並設定 Content Transform。
- Item Actions:可以在 Item View Slot Container 上加入 Item Actions,當點擊或透過程式碼觸發時執行對應動作。提供
Category Item Action Set和Category Item Actions兩種設定方式。 - Moving Items(拖放):系統分為 Cursor Manager(生成移動中的 Item View)、Drop Handler(定義放下時的動作)、Drag Handler(追蹤拖曳的起源)、Move Cursor(無滑鼠時移動物品)四個元件。
UI Designer Schemas
UI Designer Schemas 是 Prefab 和資產的集合,可以像樂高積木一樣組合起來建立 UI。
目前提供兩種官方 Schema:
匯入與匯出(Import & Export)
Import / Export 系統允許你匯入和匯出庫存系統資料庫的部分內容。這個功能的目的是修改現有資料庫,而不是建立新資料庫。適合快速批量新增物品,或在 Unity 之外以可讀格式維護物品資料表。
預設使用 CSV Import Export Module,可自訂欄位 Key 和格式。Import Export Module 是 ScriptableObject,建議在頻繁使用前先複製一份,以免更新資產時設定被覆蓋。
支援匯入/匯出的物件包含:Item Categories、Item Definitions、Crafting Categories、Crafting Recipes、Currency。
ITEM CATEGORY、ITEMDEFINITION)和名稱 Key 以外,其他欄位皆為選填。
自訂 Import Export Module
繼承 ImportExportModule 類別即可建立自訂模組:
/// <summary>
/// Import Export Module 是用於匯入/匯出資料庫的 ScriptableObject。
/// </summary>
public abstract class ImportExportModule : ScriptableObject
{
/// <summary>匯出庫存系統資料庫。</summary>
public abstract void Export(InventorySystemDatabase database);
/// <summary>匯入庫存系統資料庫。</summary>
public abstract void Import(InventorySystemDatabase database);
}
Inventory System Manager API
Inventory System Manager 是場景中的 Singleton 元件,負責管理庫存中的所有物件。每個場景都必須包含此元件,可透過 Inventory System Manager 的 Scene Setup 加入。
取得物件
// 取得 Item Category
InventorySystemManager.GetItemCategory("Weapons");
// 取得 Item Definition
InventorySystemManager.GetItemDefinition("Big Potion");
// 取得 Currency
InventorySystemManager.GetCurrency("Gold");
執行期間建立 Item
// 以名稱建立物品
InventorySystemManager.CreateItem("ItemName");
// 以 Item Definition 建立物品
InventorySystemManager.CreateItem(itemDefinition);
// 指定 ID 建立物品(適合儲存 / 伺服器端 / 客戶端同步)
InventorySystemManager.CreateItem(itemDefinition, itemID);
// 複製一個 Item
InventorySystemManager.CreateItem(item);
取得其他管理器與組件
// 取得 Display Panel Manager
var panelManager = InventorySystemManager.GetDisplayPanelManager(id);
// 取得 Inventory Identifier(坐在 Inventory 旁邊的元件)
var inventoryIdentifier = InventorySystemManager.GetInventoryIdentifier(id);
var inventory = inventoryIdentifier.Inventory;