はじめに
小ネタですが、EUWなどからStringTableに項目を追加したり、項目を削除・リセットする必要が出てきたのでそのメモを
StringTableって何って方はこちらの記事をどうぞ。非常によくまとまっていてオススメです!(いつもありがとうございます!)
qiita.com
上記の記事にある通り、エディタ上での操作であったり、CSVファイルをインポートすることでStringTableの各項目を編集することができます。また、TableIDとKeyからSoruceStringを取得したりもできます。
しかし、動的に項目を追加・削除するBPノードは用意されていません。そのため、CSVファイルを事前に用意 または 動的生成してインポートするという少し手間が発生します。
ということで、BPからStringTableを自由自在に編集できるように Add, Remove, Reset用のBPノードを作ってみました。といっても、既存のC++側にある関数を呼び出してるだけなのでかんたんです。
各コード
事前準備
#include "Internationalization/StringTable.h"
#include "Internationalization/StringTableCore.h"
#include "Internationalization/StringTableRegistry.h"
StringTableに要素を追加
void UMyBlueprintFunctionLibrary::AddSourceStringToStringTable(const FName TableId, FString Key,
FString NewSourceString)
{
UStringTable* StringTable = FStringTableRegistry::Get().FindStringTableAsset(TableId);
if (StringTable)
{
StringTable->Modify();
StringTable->GetMutableStringTable()->SetSourceString(Key, NewSourceString);
}
}
StringTableの要素を削除
void UMyBlueprintFunctionLibrary::AddSourceStringToStringTable(const FName TableId, FString Key,)
{
UStringTable* StringTable = FStringTableRegistry::Get().FindStringTableAsset(TableId);
if (StringTable)
{
StringTable->Modify();
StringTable->GetMutableStringTable()->RemoveSourceString(Key);
}
}
StringTableの全要素を削除(リセット)
void UMyBlueprintFunctionLibrary::ResetStringTable(const FName TableId)
{
UStringTable* StringTable = FStringTableRegistry::Get().FindStringTableAsset(TableId);
if (StringTable)
{
StringTable->Modify();
StringTable->GetMutableStringTable()->EnumerateKeysAndSourceStrings
([&](const FTextKey& InKey, const FString& InSourceString) -> bool
{
StringTable->GetMutableStringTable()->RemoveSourceString(InKey);
return true;
});
}
}