目录
一、DataTable
1、创建方式
首先准备一个struct定义,比如LevelUpData.h,其中AchievementIcon导入后可转化为TSoftObjectPtr<UTexture>类型:
/** Structure that defines a level up table entry */
#include "CoreMinimal.h"
#include "Engine/DataTable.h"
#include "LevelUpData.generated.h"
USTRUCT(BlueprintType)
struct FLevelUpData : public FTableRowBase
{
GENERATED_USTRUCT_BODY()
public:
FLevelUpData()
: XPtoLvl(0)
, AdditionalHP(0)
, Achievement(TEXT(""))
{}
/** 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;
/** Achievement name at this level */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "LevelUp")
FString Achievement;
/** Icon to use for Achivement */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "LevelUp")
TSoftObjectPtr<UTexture> AchievementIcon;
};
创建DataTable有如下两种方式:
a.Content Brower中点击右键菜单,选择Miscellaneous -> DataTable,选择LevelUpData,再手工输入。
b.导入的csv文件:example.csv,其中第一行第一列的名字必须为Name:
Name,XPtoLvl,AdditionalHP,Achievement,AchievementIcon
1,0,0,"Achievement1",Texture2d'/Game/UI/Textures/AchievementIcon1.AchievementIcon1'
2,1000,9,"Achievement2",Texture2d'/Game/UI/Textures/AchievementIcon2.AchievementIcon2'
3,1000,10,"Achievement3",Texture2D'/Game/UI/Textures/AchievementIcon3.AchievementIcon3'
4,1500,12,"Achievement4",Texture2D'/Game/UI/Textures/AchievementIcon4.AchievementIcon4'
5,2000,14,"Achievement5",Texture2D'/Game/UI/Textures/AchievementIcon5.AchievementIcon5'
生成后的结果:
2、使用方式
static const FString ContextString(TEXT("GENERAL"));
static ConstructorHelpers::FObjectFinder<UDataTable> LevelUpDataDataTable_BP(TEXT("DataTable'/Game/UI/example.example'"));
UDataTable* LevelUpDataDataTable = LevelUpDataDataTable_BP.Object;
FLevelUpData* Row = LevelUpDataDataTable->FindRow<FLevelUpData>(*FString::Printf(TEXT("%d"), 1), ContextString);
GEngine->AddOnScreenDebugMessage(-1, 60.f, FColor::Red, FString::Printf(TEXT("Achievement=%s"), *Row->Achievement));
二、CurveTable
1、创建方式
需要导入的csv文件:example1.csv,其中第一行第一列的名字必须为Name:
Name,0,1,2,3
Melee_Damage,15,20,25,30
Melee_KnockBack,1,2,4,8
Melee_KnockBackAngle,10,45,60,65
Melee_StunTime,0,1,5,7
curve interpolation type上课选如下三种值:
Cubic:三次插值
Constant:常数内插法
Linear:线性插值
导入后的结果:
2、使用方式
使用方式与CurveTable的使用方式相同
三、StringTable
1、创建方式
a.使用C++创建
// Create and populate a string table using only C++
LOCTABLE_NEW("CodeStringTable", "CodeStringTable");
LOCTABLE_SETSTRING("CodeStringTable", "HelloWorld", "Hello World!");
LOCTABLE_SETMETA("CodeStringTable", "HelloWorld", "Comment", "This is a comment about hello world");
LOCTABLE_SETSTRING("CodeStringTable", "GoodbyeWorld", "Goodbye World!");
LOCTABLE_SETMETA("CodeStringTable", "GoodbyeWorld", "Comment", "This is a comment about goodbye world");
b.使用csv文件创建
使用LOCTABLE_FROMFILE_X加载CSV文件
若X=ENGINE,表示CSV文件存放于相对于Engine的content目录的位置;
若X=GAME,表示CSV文件存放于相对于项目content目录的位置;
例子如下:
Key,SourceString,Comment
"HelloWorld","Hello World!","This is a comment about hello world"
"GoodbyeWorld","Goodbye World!","This is a comment about goodbye world"
代码如下:
// Create and populate a string table from a CSV file
LOCTABLE_FROMFILE_GAME("CSVStringTable", "CSVStringTable", "StringTableCSV/TestStrings.csv");
c.创建String Table Asset
Content Browser (Add > Miscellaneous > String Table)
2、使用方式
a.从C++代码中作用
LOCTABLE(ID, KEY)
FText::FromStringTable(const FName InTableId, const FString& InKey, const EStringTableLoadingPolicy InLoadingPolicy)
b.从INI文件中使用
使用LOCTABLE宏
c.从FText属性忡使用
d.从Blueprint中使用
比如使用Make Literal Text节点
参考文档
Documentation Home -> Programming Guide -> Data Driven Gameplay Elements
Documentation Home -> Gameplay Guide -> Localization -> String Tables
Using excel to store gameplay data - DataTables
Driving Gameplay with Data from Excel
[UE4]引擎自身提供的一种夸平台读写Excel的组件:DataTable