|
本页面的内容:
数据表
示例
数据曲线
示例
导入过程
数据连接
数据使用(仅限程序员)
对于延长寿命远远超出典型盒装游戏并 要求根据玩家反馈不断调整和平衡数据的游戏而言, 数据驱动游戏性有助于减轻所涉及的工作量和复杂性, 并能可视化和参数化数据创建与调度。此外,还能够将数据导出到 Excel 或其他可使用可靠工具进行维护的电子表格文档,然后再导入, 以便在游戏中自动生效。
通过 Excel 文档将数据导入 UE4 的新方法有两种:
数据表
曲线表
这些 Excel 文档以“.xlsm”为扩展名(启用宏的 Excel 文档),并具有基于宏的导出按钮, 可轻松导出至中间数据格式,即逗号分隔的变量(“.csv”)。 这些文档都处于一个位置,有助于查找和修改数据。
Example.xlsm
(right-click**和**Save as...以下载)
数据表
顾名思义,数据表就是以有意义且有用的方式将各种相关的数据归类的表格, 其中,数据字段可以是任何有效的 UObject 属性,包括资产引用。在设计师将 CSV 文件导入数据表前,程序员必须创建行容器以指示引擎如何解释数据。 这些数据表包含了列名,这些列名和基于代码的UStruct结构以及它的(子)变量一一对应, 这个UStruct的结构必须继承自FTableRowBase才可以被导入器辨识。
首列应命名为“Name”,并包含用于访问每行以供游戏使用的资源文件名称。随后的列 具有标题的变量名,而且同一列的下方为行/列交叉点的数据。鉴于此格式, 每一行将与继承自 FTableRowBase 的结构一一对应。
示例
例如,以下显示了升级经验数据的定义和向游戏提供数据的 CSV 文档:
/** Structure that defines a level up table entry */USTRUCT(BlueprintType)struct FLevelUpData : public FTableRowBase{ GENERATED_USTRUCT_BODY()public: FLevelUpData() : XPtoLvl(0) , AdditionalHP(0) {} /** The 'Name' column is the same as the XP Level */ /** XP to get to the given level from the previous level */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=LevelUp) int32 XPtoLvl; /** Extra HitPoints gained at this level */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=LevelUp) int32 AdditionalHP; /** Icon to use for Achivement */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=LevelUp) TAssetPtrUTexture AchievementIcon;};
CSV Document:
Name,XPtoLvl,AdditionalHP,AchievementIcon1,0,0,"Texture2d'/Game/Textures/AchievementIcon1'"2,1000,9,"Texture2d'/Game/Textures/AchievementIcon2'"3,1000,10,"Texture2D'/Game/Textures/AchievementIcon3'"4,1500,12,"Texture2D'/Game/Textures/AchievementIcon4'"5,2000,14,"Texture2D'/Game/Textures/AchievementIcon5'"
资产类型前后的双引号对属性导入途径十分重要。若没有双引号,则文本将导入为 Texture2d'。
数据曲线
数据曲线的工作方式与数据表相似, 但数据曲线仅支持浮点型数据。和数据表一样,首列命名为“Name”,并包含用于访问每行 以供游戏使用的资源文件名称。首列后的每个列标题存储 用于绘制曲线的 X 轴变量。该标题下的数据为给定行的 Y 轴值。鉴于此格式, 每一行将与一个代码可访问并沿其插入数据的曲线相应。
示例
以下为伤害进程的示例表格:
0
1
2
3
Melee_Damage15202530Melee_KnockBack0000Melee_KnockBackAngle0000Melee_StunTime0000导入过程
导入 CSV 文件的过程非常简单:
从 Excel 或其他电子表格软件以“.csv”为扩展名保存文件。
打开虚幻编辑器,然后在**Content Browser**中点击**Import**。3.浏览并选择您要导入为数据表的 CSV 文件。4.最后,从下拉列表中选择行表示法,此例中即 LevelUpData。
<src="./images/Gameplay/DataDriven/levelupdata_options.jpg[/img]
该操作将在**Content Browser**的当前资源详细内容中创建数据表对象。
<src="./images/Gameplay/DataDriven/datatableobject.jpg[/img]
您可以通过**double-clicking**对象在编辑器中查看数据表的内容。您可以通过**right-clicking**对象并选择从菜单**Reimport**更新对象。 请注意,重新导入对象时将使用原始文件路径。以下为完成导入后的数据视图:
<img alt="datatableview.jpg[/img] src="./images/Gameplay/DataDriven/datatableview.jpg[/img]
数据连接
通过这些表格连接数据非常简单。从程序员的角度来看,必须执行的操作是 放置“FDataTableRowHandle”或“FCurveTableRowHandle”的蓝图公开变量, 具体取决于您想要数据表还是曲线表。从内容服务商的角度来看, 该操作将显示包含两个子字段的数据字段:
数据表/曲线表 - 这是对包含数据的表格的内容引用。
行资源文件名称 - 这是您要从中获取数据的行的首列资源文件名称。
数据使用(仅限程序员)
连接数据后,使用数据十分简单。句柄结构将提供 辅助函数(“FindRow()”和“GetCurve()”),以允许您检索填充了数据的结构或曲线。 针对“FCurveTableRowHandle”,返回值为一个“FRichCurve”指针。“FDataTableRowHandle”则 允许您在模板函数调用中指定结构。该结构可以是继承性分层中的 最终结构或任何父结构。
最后请注意,所有返回的结构和曲线不得在 超出函数的本地范围外缓存。其目的是确保若通过重新导入刷新表格, 数据更改将立即生效且无法访问无效的指针。
在上述数据表示例中,引用的资产为延迟加载资产(TAssetPtr 处理此事项)。 如果资产字段类型设置为 UTexture,则将在加载数据表时加载所有资产。
|
|