はじめに
エディタ設定の Show Frame Rate and Memory
をONにすると、エディタ右上にフレームレートやメモリなどの情報が出ます。
ここにプロジェクト固有の情報表示したい! パフォーマンス関連の情報ももっと出したい!!!
できた!!!
ということで、エンジンコードを彷徨ってたらやり方を見つけました、という話。
エディタ右上にテキストを追加する方法
FLevelEditorModule::AddTitleBarItem
関数を使って、エディタ右上に表示されるテキストを追加します。
各テキスト項目はAddTitleBarItem
に渡すFTitleBarItem
の Label, Value(FText
)で設定します。Valueは関数を渡すこともでき、リアルタイムに変化するデータも表示できます!
ということで、サンプルコードを。Moduleで実装していますが、Subsystemなどの他クラスでも利用可能です。
#define LOCTEXT_NAMESPACE "XXX" // staticで宣言する必要あり FText FXXXModule::GetGameThreadTime() { // "RenderCore" を PrivateDependencyModuleNames に追加 const float GameThreadTime = FPlatformTime::ToMilliseconds(GGameThreadTime); // const float GameThreadWaitTime = FPlatformTime::ToMilliseconds(GGameThreadWaitTime); // const float RenderThreadTime = FPlatformTime::ToMilliseconds(GRenderThreadTime); // const float RenderThreadWaitTime = FPlatformTime::ToMilliseconds(GRenderThreadWaitTime); return FText::Format(LOCTEXT("Game", "{0} ms"), GameThreadTime); } void FXXXModule::StartupModule() { ... FLevelEditorModule* LevelEditorModule = FModuleManager::GetModulePtr<FLevelEditorModule>("LevelEditor"); if (LevelEditorModule != nullptr) { FLevelEditorModule::FTitleBarItem Item; // 固定の文字列 Item.Label = LOCTEXT("HogeLabel", "Hoge?: "); Item.Value = LOCTEXT("HogeValue", "Hoge Hoge!"); LevelEditorModule->AddTitleBarItem(TEXT("Hoge"), Item); // 処理を直接渡す Item.Label = LOCTEXT("TimeLabel", "Time: "); Item.Value = MakeAttributeLambda([]() { return FText::FromString(FDateTime::Now().ToString()); }); LevelEditorModule->AddTitleBarItem(TEXT("Time"), Item); // 関数を渡す Item.Label = LOCTEXT("GameLabel", "Game: "); Item.Value = TAttribute<FText>::Create(&GetGameThreadTime); LevelEditorModule->AddTitleBarItem(TEXT("Game"), Item); } } void FXXXModule::ShutdownModule() { ... FLevelEditorModule* LevelEditorModule = FModuleManager::GetModulePtr<FLevelEditorModule>("LevelEditor"); if (LevelEditorModule != nullptr) { LevelEditorModule->RemoveTitleBarItem(TEXT("Hoge")); LevelEditorModule->RemoveTitleBarItem(TEXT("Time")); LevelEditorModule->RemoveTitleBarItem(TEXT("Game")); } } #undef LOCTEXT_NAMESPACE
余談
Show Frame Rate and Memory
有効時の処理はFMainFrameModule::MakeDeveloperTools
で実装されており、今回の記事で紹介した方法は FVPUtilitiesEditorModule::StartupModule()
で使われています。
今回の内容で十分な気はしますが、もっとガリガリ弄りたいという方は上述のコードをみたり編集していくのがいいと思います!
さいごに
階層が深いところにあったり、なにか特殊な操作をしないと見れない情報は届かないことが多いです。 なので、本当に必要な情報であったり、スクショをもらったときにヒントとなる情報は絶対見えるところに出すと…少ししあわせになる…かもしれません!
おしまい