みんな大好きCSV!
UE4には様々な箇所にCSVファイル出力機能が用意されており、これらを活用することでデータ管理・確認・比較作業などを効率よく行うことができます。
ということで、どんな箇所に用意されているのかをご紹介します(数が多いので全ては紹介しません!)
DataTable・CurveTable
UE4でCSVといったらまず思いつくのがDataTable!アセットの右クリックメニューから入出力が可能です。
https://docs.unrealengine.com/ja/Gameplay/DataDriven/index.html
また、類似の機能である CurveTable でも同様の操作が可能です。
http://historia.co.jp/archives/1067/
StringTable
テキストのローカライズ管理で使用するStringTable(文字列テーブル)でもCSVファイルの入出力が可能です。
https://docs.unrealengine.com/ja/Gameplay/Localization/StringTables/index.html
ちなみに、先日ローカライズに関する勉強会が開催されました!StringTableの使い方だけでなく様々な有益情報が公開されていますのでぜひご確認ください!
https://www.unrealengine.com/ja/blog/localization-deep-dive
SAssetView
SAssetViewで実装されたウィンドウのView 右下にあるView TypeがColumnの場合、Options-> Export to CSVからCSVファイルを出力できます。
コード:SAssetView::GetViewButtonContent()
, SAssetView::ExportColumns()
SAssetViewが使われている箇所
この他にも沢山用意されています。右下に「View Options」を見つけたら是非試してみましょう!
StartFPSChart / StopFPSChart
長期間に渡ってstat unitで計測した結果をCSVファイルで出力してくれるコンソールコマンド「StartFPSChart」「StopFPSChart」
https://docs.unrealengine.com/ja/Engine/Performance/Overview/index.html#%E4%B8%80%E5%AE%9A%E6%9C%9F%E9%96%93%E3%81%AE%E3%83%81%E3%83%A3%E3%83%BC%E3%83%88%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B
CSV Profiler
様々なパフォーマンス情報をCSVファイルで出力してくれるCSV Profiler。詳細は以下の解説記事にて!
https://qiita.com/EGJ-Ken_Kuwano/items/a6c97a7eda8d69cae6d5
https://docs.unrealengine.com/ja/Engine/Performance/CSVProfiler/index.html
Automation Report Manager
Automation Toolを使って自動化テストをした際の結果をCSVファイルで出力してくれます。日々のチェック、問題が起きた際の比較をする際に便利です!
https://docs.unrealengine.com/ja/Programming/Automation/UserGuide/index.html
AllChunksInfo.csv
プロジェクト設定->Packagingの「Generate Chunksが有効」かつ「Generate No Chunksが無効」の場合、<PROJECT_ROOT>\Saved\Cooked\<PLATFORM>\<PROJECT_NAME>\Metadata
以下に パッケージに含まれる各アセットのChunk ID, Class Type, File Sizeなどの情報を含むCSVファイル AllChunksInfo.csv を出力してくれます。Chunkに関する作業時だけでなくパッケージサイズの削減をする際にも便利かと思います!
Commandlet
作業の自動化などでよく用いられるコマンドレットの一部にはCSV出力用のオプションが用意されています。
- DiffAssetRegistries
- ShaderPipelineCacheTools
https://docs.unrealengine.com/en-US/API/Runtime/Engine/Commandlets/UCommandlet/index.html
https://docs.unrealengine.com/en-US/API/Editor/UnrealEd/Commandlets/index.html
おまけ:CSVToSVG
CSVの内容をより見やすくグラフ化するための機能が4.23で追加されました!
https://docs.unrealengine.com/ja/Engine/Performance/CSVToSVG/index.html
詳細に関してはまた後日!(Epic Games Japan Advent Calendar 2019のどこかでアップされるとかされないとか…
おまけ:C++ / BPからCSVを出力する方法
EditorScripiting機能を使って各情報を収集・計測し結果をCSV出力したいケースがあるかと思います。その際は FFileHelper::SaveStringToFile
関数やSaveStringArrayToFile
関数を活用しましょう!この関数にカンマ区切りの文字列を渡すことでCSVを出力する事が可能です。
実はこれまで紹介してきたCSV出力機能はこれらの関数を最終的に用いています。例えばDataTableのCSV出力を行っている FAssetTypeActions_DataTable::ExecuteExportAsCSV 関数では以下のように使われています。
const FText Title = FText::Format(LOCTEXT("DataTable_ExportCSVDialogTitle", "Export '{0}' as CSV..."), FText::FromString(*DataTable->GetName()));
const FString CurrentFilename = DataTable->AssetImportData->GetFirstFilename();
const FString FileTypes = TEXT("Data Table CSV (*.csv)|*.csv");
TArray<FString> OutFilenames;
DesktopPlatform->SaveFileDialog(
ParentWindowWindowHandle,
Title.ToString(),
(CurrentFilename.IsEmpty()) ? TEXT("") : FPaths::GetPath(CurrentFilename),
(CurrentFilename.IsEmpty()) ? TEXT("") : FPaths::GetBaseFilename(CurrentFilename) + TEXT(".csv"),
FileTypes,
EFileDialogFlags::None,
OutFilenames
);
if (OutFilenames.Num() > 0)
{
FFileHelper::SaveStringToFile(DataTable->GetTableAsCSV(), *OutFilenames[0]);
}
残念ながらBPには公開されていないので…以下のように実装してBPノードを用意しましょう!
UFUNCTION(BlueprintCallable)
static bool ExportCSVFromCSVString(const FString& CSVString, FString Filename);
UFUNCTION(BlueprintCallable)
static bool ExportCSVFromDataTable(UDataTable* DataTable, FString Filename);
bool UMyBlueprintFunctionLibrary::ExportCSVFromCSVString(const FString& CSVString, FString Filename)
{
return FFileHelper::SaveStringToFile(CSVString, *Filename);
}
bool UMyBlueprintFunctionLibrary::ExportCSVFromDataTable(UDataTable* DataTable, FString Filename)
{
if (DataTable)
{
return FFileHelper::SaveStringToFile(DataTable->GetTableAsCSV(), *Filename);
}
return false;
}
おしまい