【UE4】PrintStringノードについて 【★】

※この記事で使用しているUnrealのVersionは04.23.0です。

※この記事のサンプルプロジェクトは以下URLにアップされています。
サンプルプロジェクト

今回はすべてLevel Blueprintの中でのお話になります。

Unrealを起動しながらのご覧の際は、各自のPersistent LevelのLevel Blueprintを開いておきましょう。

Level Blueprintの開き方は、エディター内の「Tool bar」ウィンドウ内にある「Blueprints」を選択し、「Open Level Blueprint」を押してください。

すると、以下のようなウィンドウが開きます。

ここまでで準備OKです。

PrintStringの使い方あれこれ レベル【★】

みなさん、Unreal EngineでBlueprintを学ぶ際に誰しもがお世話になったノードが「Print String」ノードだと思います。

Print Stringノードは、画面上や「Output Log」ウィンドウに指定した文字列を表示してくれます。

↓Event BeginplayにPrintStringノードを接続して、Play Inを押した場合。

↓画面上

↓Output Log上

※Output Logの表示の仕方は、エディター左上の「Window」から「Developer Tools」→「Output Log」を選択することで表示できます。

Print Stringノードには、いくつかの引数(設定項目)があります。
(ノード下の▽を押すことで詳細な設定を行えます)

Print to Screen:画面上に文字を表示するか。
Print to Log:Output Log上に書き出すか。
Text Color:画面上に表示する際の文字の色。
Duration:画面上に表示する際の表示時間。

Print Stringは、Durationの秒数以内に再びPrint Stringノードが呼び出された際は、古いPrint Stringはどんどん下に追いやられてしまいます。

https://kinnaji.com/wp-content/uploads/2019/10/AGDRec-3.mp4

なので、あまり大量に仕込むと画面で確認したいことが確認できないので気を付けましょう(Levelの読み込みとかでブワァーっとログが表示されるプロジェクトがよくあります)

ちなみに、Durationを「0.0」にして、Event Tickなどで毎フレーム呼び出すと、常にログを表示し続けてくれます。

https://kinnaji.com/wp-content/uploads/2019/10/AGDRec-4.mp4

※その際「Print to Log」にチェックが入っていると、Output LogやLogファイルに文字がブワァーっと羅列されてしまうので気を付けましょう。
※また、Blueprintでの毎フレーム処理はそもそも重いので、ご利用はご計画的に。

Print Stringを使う例として、変数などの中身を表示するというものがあります。

Unrealでは、UnrealのPrimitive型(基本となる型、boolean,Integerなど)のほとんどは簡単に文字列に変換できます。

つなげたい変数などのピンをPrint Stringの「In String」部分にドラッグ&ドロップしてあげるだけです。

https://kinnaji.com/wp-content/uploads/2019/10/AGDRec-5.mp4

Integer64以外のPrimitive型はこの方法で変換できます。
(Integer64だけは、直接String型への変換はありませんでした。To Textでテキストに変換後Stringという方法が今のところできる処理となっています)

↓デフォルト値をそのままStringに変換した際の文字

Boolean:false
Byte:0
Integer:0
Integer640
Float:0.0
Name:None
String:
Text:
Vector:X=0.000 Y=0.000 Z=0.000
Rotator:P=0.000000 Y=0.000000 R=0.000000
Transform:Translation: X=0.000 Y=0.000 Z=0.000 Rotation: P=0.000000 Y=0.000000 R=0.000000 Scale X=1.000 Y=1.000 Z=1.000

また、すべてのObject系「Actorなど」は以下のように変換できます。

・Object Reference→「Display Name」または「Object Name」という関数で、オブジェクトの名前を取得できます。
※どちらも似ていますが、DisplayNameはパッケージなどだと変化してしまう恐れがあるので、基本的にはObject Nameを使うことをお勧めします。
・Class Reference→「Display Name」でClassの名前を取得することができます。
・Soft Object Reference→To StringノードでStringに変換できます(Stringピンにドラッグ&ドロップしても、勝手につなげてくれないので、自分でContent Finderから検索して出現させます)
・Soft Object Reference→To StringノードでStringに変換できます(同じくドラッグ&ドロップではつなげてくれないので自分で出現させます)

また、すべてのEnum(列挙体)は、Stringピンにドラッグ&ドロップで、Stringに変換できます。

また、Structure(構造体)は、基本的にはそのままでは変換できませんが、一部変換できるものもあるようです(Vector2Dなど)

尚、Interface系のノードは、Stringへの変換はできないようです。

オンラインゲームなど用に使う複数人プレイ時にPrint Stringノードを使った場合は、
その処理がServer側とClient側のどちらで行われたのかが、自動的にStringに追加されます。(Client:やServer:という文字が頭に追加される)

※手軽に複数人プレイの確認をしたい際は、「Toolbar」内の「Play」の右側にある▽から「Number of Players」という部分の数字を増やしてください。
その状態でプレイすると、複数窓が出現しエディター上で複数人プレイできます。

ここまでザーッとPrint String(やString変換について)を説明しましたが、LogをOutput Logウィンドウに出力して確認するときに他のログが邪魔で見えづらいなんてことはありますよね。

Print Stringノードは、Output Logに出力する際には必ずどのオブジェクトから出力されたのかが「[]」内に表示されていますので、Objectの名前がわかっている場合は、Output Logウィンドウ上部の検索ボックスでObject名を指定して検索をかけると便利です。

また、Print Stringノードは、文字の頭に「Warning:」「Error:」とつけることで、そのログの種類が変化して、Output Log上に表示される色も変化します。

「Warning:Hello」と設定した場合には黄色に、「Error:Hello」と設定した場合には赤になりました。

これで、ログを探す際に少しは見つけやすくなると思います。

※WarningやErrorをつけても、Output Logウィンドウの「Filter」機能ではソートできないので気を付けてください。

ざっと説明しましたが、以上となります。

皆さん良いBlueprintライフを。

※この記事のサンプルプロジェクトは以下URLにアップされています。
サンプルプロジェクト