UE4_DataTable 实现Id自增与设置RowName

在编辑器下实现id自增

请添加图片描述

例如上图,在点击Add时,实现Id自动加1,如何实现呢?

方法如下:

  1. 在定义如图上述的结构体时,在Id属性列,在结构体属性初始化时赋值

请添加图片描述

  1. 定义一个静态方法,静态方法里动态获取Datatable表里的数据

    获取上述表结构里的Id的属性值的方法有很多,如下只提供一个参考

   int32 UDataTableHelperUtils::GetDataTableLastIdNum()
      {
      	int CardId = 0;
      	UDataTable* DataTable = LoadObject<UDataTable>(nullptr,TEXT("DataTable'/Game/DataTables/DT_Cards.DT_Cards'"));
      	if(!DataTable) return CardId;
      
      	TArray<TArray<FString>> TableData = DataTable->GetTableData();
      #if WITH_EDITOR
      	for(int i=0; i< TableData.Num();i++)
      	{
      		FDataTableEditorUtils::RenameRow(DataTable,*TableData[i][0],*TableData[i][1]);
      	}
      #endif
      	
      	DataTable->Modify();
      
      	// UEditorAssetLibrary::SaveAsset(TEXT("DataTable'/Game/DataTables/DT_Cards.DT_Cards'"),false);
      
      	const FString RowId = TableData[TableData.Num()-1][1];
      	CardId = FCString::Atoi(*RowId);
      
      	return CardId;
      
      	
      }

​ 其中DataTable->GetTableData()方法里获取的是一个二维数组,行列结构。默认列下标为1是代表id属性的值

​ 其中const FString RowId = TableData[TableData.Num()-1][1];获取就是最后一行Id的属性值

动态修改RowName

如果是使用代码层面,动态添加一条记录。可以使用FDataTableEditorUtils,主要该类属于UnrealEd模块,在运行时是不可以使用的。

请添加图片描述

FDataTableEditorUtils::AddRow()

在运行时或者Runtime模式下,也可以通过UDataTable的方法AddRow()实现添加,但在运行时没有提供重置RowName的方法。

在上述代码中,该方法修改RowName并不是一个很高效的办法,这个可根据实际情况调整,笔者在编辑器下进行测试,不考虑性能问题

for(int i=0; i< TableData.Num();i++)
{
		FDataTableEditorUtils::RenameRow(DataTable,*TableData[i][0],*TableData[i][1]);
}

最后的最后,如果您觉得这篇文章帮助到您,请资助下这位朋友的粮食,谢谢!

请添加图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值