LoginSignup
4

More than 1 year has passed since last update.

posted at

updated at

[UE4]UnrealInsightsとログ表示

UnrealInsights使ってますか?
4.23から追加された機能なのですが、めちゃんこ良いツールなのでバンバン使っていきましょう!
特に強いプロファイラーの無いプラットフォーム向け開発に強い味方になってくれます。

2020/6/11追記

エピックゲームズジャパンオンラインラーニングシリーズのUnrealInsightsの解説が公開されました。
非常に広範にわたってUnrealInsightsの解説がなされておりますので是非ご参照ください。

UE4.25 Update - Unreal Insights -

準備

UnrealInsightsはリリースされたばかりなので簡単に起動までを簡単におさらいします。

まず
VisualStudioでエンジンのソリューションを開き、UnrealInsightsをビルドする
これが重要です。

ビルドが成功すれば Engine/Binaries/Win64/UnrealInsights.exe ができているはずなのでいつでも起動できるようにショートカットを作っておくのをお勧めします!
image.png

起動

ビルドが終わったら大きく2つの方法でキャプチャーをとります

4.25での変更点(重要)

4.25からデフォルトではログが出力されないようになっています。

UnrealInsightsへの出力データはカテゴリごとにTraceChannelに分類されており、
どのTraceChannelを有効にするのかをコマンドラインオプションで指定する必要があります。
Logも一つのチャンネルに割り当てられており、デフォルトでは無効になっています。

cpu,loadtime,logを有効にする場合は

-trace=cpu,loadtime,log

のような形で-traceオプションの引数として入力します。

ホストPC上でUnrealInsightsを動かしアプリから通信をつかって出力

  1. ホストPC上でUnrealInsightsを起動しておく
  2. エディタからスタンドアローン起動する場合、スタンドアローン起動のコマンドラインオプションに-cpuprofilertraceを付けて起動する。
    ウィンドウズ向けの非ShippingビルドはIPを指定しなくても同一PC上のUnrealInsightsに接続を試みてくれます。
  3. パッケージしたゲームなどもtcp接続が可能な環境であれば -tracehost=ii.pp.aa.dd -cpuprofilertrace をコマンドラインオプションに渡せば接続可能です。

自分でファイルを出力する

-tracefile=ファイルパス を使ってローカルにファイルを生成することも可能です。

さて本題

UnrealInsightsは起動時からすべてをファイルに保存しているため、横に長くなってしまします。
この中から見たい位置をマウスなどでぐりぐりと探すのは時間がかかります。。。

image.png

しかし!ブループリントなどで出力されるログがInsightには含まれています。これをタイムライン上に表示できるのです
ここでおもむろにキーボードのMを押しましょう!

image.png

タイムラインの上に文字列が並んだ行が追加されます。
ログを出力したタイミングで線が引かれていて、見たいところが非常にわかりやすくなります。
画面下部のログ表示タブ上からログを選んでクリックすることタイムラインをジャンプすることもできます。

image.png

(余談)AndroidでInsightを使う(UE4.24以降)

プロファイラでいろいろ苦戦してしまいがちなAndroid向けビルドにもInsightが役立ちます!
いろいろな方法でInsightを利用可能です。

Improvement: Enabled event tracing (such as Unreal Insights) on Android, iOS, Mac, Linux, and Switch.

Androidは4.24から利用可能です!

1.USB接続を介して通信する

公式ドキュメントの下の方に記載があります。
https://docs.unrealengine.com/4.27/ja/TestingAndOptimization/PerformanceAndProfiling/UnrealInsights/Overview/#android
adbのreverseコマンド(逆ソケット)をつかってデバイス内の通信をホストPCに流すことができます。

adb.exe reverse tcp:1980 tcp:1980

デバイスに対して1980ポートで通信を行うとadbがそれをホストPCの1980に流してくれるわけですね。
CommandLine引数は-tracehost=127.0.0.1 -cpuprofilertrace でOKです。
この逆ソケットを応用すれば「localhost指定でホストPC上のDedicatedServerに接続させる」みたいなこともできそうです。

2.Android上でTracefileを使ってローカル出力

tracefileオプションを使うことでデバイス上のストレージにファイルを出力することもできます。
非力なデバイス上で大量の情報をファイルに出力しようとすると、それ自体が負荷になってしまう こともあるので
デバイスに合わせて選択してください。

3.Androidとadbを介してワイヤレス接続する

同一LAN内にHostPCとAndorid端末が接続できていればホストPCのIPAddressを指定することでもホスト上のUnrealInsightsと接続ができます。

adbで接続しながらローカルネットワークで通信する場合、adb connectによってwifi越しにadb接続をする方法もありますので紹介します。(検証中に見つました)
https://developer.android.com/studio/command-line/adb#wireless
大雑把にいうと、通常通りUSBで繋いだ後adb tcpip 5555を入力してワイヤレスadb接続を有効化し、adb connect device_ip_address が受け入れられればUSB接続無しでadb接続が可能です。

ホストPCと同一サブネット内にあるなら、UE4CommandLine.txtにホストPCのアドレスを含めて -tracehost=ii.pp.aa.dd -cpuprofilertrace を追記したあとに起動すれば接続できます。
UE4CommandLine.txtについてはこちらのドキュメントが詳しいです。
https://wiki.unrealengine.com/Command-Line_Arguments_on_Mobile

ホストのIPを記述するのは面倒ですがケーブルを刺さなくていいのは取り回しが楽でいいですね。

↓成功するとこのような形になります。
image.png

まとめ

とても軽くて便利です!特にPC向けやモバイル開発の際に強い味方になってくれます!
是非活用してください!

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
What you can do with signing up
4