Unreal Cook Book:資料驅動

燕良發表於2016-07-14

在遊戲開發中經常要用到資料驅動,俗稱“策劃拉表”。在虛幻4引擎中,有多種方式處理資料,在這裡我就介紹最常用的兩種。


虛幻引擎內建的表格匯入機制

假設策劃同學有以下這樣一個資料表,用來儲存道具相關的資訊:
| Name | Damage | Price | Desc
|--------|:--------|:--------|:--------|:
| Shanker | 707 | 6395 | Warmongering Gladiator’s Shanker
| Ripper | 814 | 6400 | Tournament Gladiator’s Ripper
| Chopper | 407 | 3976 | Warmongering Combatant’s Chopper

想要匯入這個資料表的話,首先需要定義一個與這個表結構相對應的資料結構。如果使用C++程式設計的話,需要建立一個FTableRowBase的派生類;使用Blueprint的話,就建立一個標準的結構體就可以了。下圖就是我為這個表格建立的Blueprint Struct。
ItemDef

然後,上述表格需要存成CSV格式。然後,你就可以把這個CSV檔案拖放到引擎的Content Browser中了。在資料匯入的設定中,把資料型別設定成我們這個結構體:ItemDef。
CSV匯入設定

最後,我們就可以使用GetDataTableRowNames和GetDataTableRow這兩個藍圖節點來讀取這個表格資料了。具體的藍圖如下:
BP_DataDriven
如果看不清圖片的話,請下載工程檔案吧。:)


虛幻引擎的DataAsset

另外一個常見的需求是我們需要在引擎編輯器中編輯一些常用的資料物件,這些資料並不需要批量配置,但需要方便靈活的修改。在Unity3D中提供了ScriptObject來做這類事請,而在虛幻4中提供了DataAsset,也是同樣的目的,使用方法也十分類似。
首先我們需要建立一個UDataAsset的派生類,用這個類來管理一組資料:

/**
 * 演示使用DataAsset來處理資料
 */
UCLASS(Blueprintable, Category="DataDemo")
class UNREALCOOKBOOK_API UQuestDataAsset : public UDataAsset
{
	GENERATED_BODY()
	
public:
	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "DataDemo")
	FString QuestSetName;

	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "DataDemo")
	TArray<FQuestDef> QuestArray;
};

有了這個類之後,在Content Browser的New Asset選單–>雜項裡面選擇“DataAsset”,就會彈出下面這個視窗,視窗中就多出了我們這個類:

New Data Ssset

  • 建立了這個DataAsset之後,就可以用引擎內建的編輯器來編輯它:
    Edit Data Asset

  • 編輯好之後,我們就可以在Blueprint中使用LoadAsset節點來載入它:
    Load Data Asset


工程檔案&原始碼下載

原始碼下載: https://github.com/neil3d/UnrealCookBook
DEMO執行:Content/DataDemo/DataDemoMap


相關官方文件:https://docs.unrealengine.com/latest/INT/Gameplay/DataDriven/

相關文章