19
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Epic Games Japan #4Advent Calendar 2019

Day 5

[UE4] CSVファイル出力機能が用意されている箇所について

Last updated at Posted at 2019-12-04

みんな大好きCSV!

UE4には様々な箇所にCSVファイル出力機能が用意されており、これらを活用することでデータ管理・確認・比較作業などを効率よく行うことができます。
ということで、どんな箇所に用意されているのかをご紹介します(数が多いので全ては紹介しません!)

DataTable・CurveTable

image.png
UE4でCSVといったらまず思いつくのがDataTable!アセットの右クリックメニューから入出力が可能です。
https://docs.unrealengine.com/ja/Gameplay/DataDriven/index.html
また、類似の機能である CurveTable でも同様の操作が可能です。
http://historia.co.jp/archives/1067/

StringTable

StringTables-01.jpg
テキストのローカライズ管理で使用するStringTable(文字列テーブル)でもCSVファイルの入出力が可能です。
https://docs.unrealengine.com/ja/Gameplay/Localization/StringTables/index.html

ちなみに、先日ローカライズに関する勉強会が開催されました!StringTableの使い方だけでなく様々な有益情報が公開されていますのでぜひご確認ください!
https://www.unrealengine.com/ja/blog/localization-deep-dive

SAssetView

image.png
SAssetViewで実装されたウィンドウのView 右下にあるView TypeがColumnの場合、Options-> Export to CSVからCSVファイルを出力できます。
コード:SAssetView::GetViewButtonContent(), SAssetView::ExportColumns()

SAssetViewが使われている箇所
**● Content Browser** ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363889/50cac0ad-38ee-e63e-d97d-55178db1ca20.png) **● Global Asset Picker ( Ctrl + P )** https://docs.unrealengine.com/ja/Engine/UI/GlobalAssetPicker/index.html ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363889/9d78907c-8dd9-580e-9712-56885d764efd.png) **● Asset Audit** https://www.unrealengine.com/ja/tech-blog/optimizing-battle-breakers-for-chunked-downloading ![Unreal+Engine_blog_optimizing-battle-breakers-for-chunked-downloading_ChunkAssetAudit_01-1050x701-417b75a61fa149debe552e55a6eeaa8a79b92fbd.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363889/4135b45a-1e7a-f33c-16be-ab632474334e.jpeg) **● Asset Browser (Persona)** ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363889/597db183-c1d3-a69d-579c-83183d5ac740.png) **● Asset Picker** ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363889/eb80a0e8-bd9f-796c-b896-f82ece4c450f.png) **● Save Asset** ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363889/4c22aa4a-2b26-ebc2-dd7b-8f26533d6e0f.png)

この他にも沢山用意されています。右下に「View Options」を見つけたら是非試してみましょう!

StartFPSChart / StopFPSChart

fpschart.jpg
長期間に渡って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

image.png
image.png
様々なパフォーマンス情報をCSVファイルで出力してくれるCSV Profiler。詳細は以下の解説記事にて!
https://qiita.com/EGJ-Ken_Kuwano/items/a6c97a7eda8d69cae6d5
https://docs.unrealengine.com/ja/Engine/Performance/CSVProfiler/index.html

Automation Report Manager

ExportTests.jpg
Automation Toolを使って自動化テストをした際の結果をCSVファイルで出力してくれます。日々のチェック、問題が起きた際の比較をする際に便利です!
https://docs.unrealengine.com/ja/Programming/Automation/UserGuide/index.html

AllChunksInfo.csv

image.png
image.png
プロジェクト設定->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出力用のオプションが用意されています。

おまけ:CSVToSVG

CsvUnitFPSChart.jpg
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;
}

おしまい

19
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?