PaperSloth’s diary

主にゲーム開発関連についての記事を書きます。

UE4 Unreal C++を書くための環境構築

この記事はUnreal Engine 4 (UE4) Advent Calendar 2017の9日目の記事です。
Unreal Engine 4 (UE4) Advent Calendar 2017 - Qiita

環境

・Unreal Engine4.17.2
Visual Studio Community 2015

プログラミング環境の選択

大きく分けて4つ程選択肢があります。
Visual Studio
Visual Studio Code
XCode
・Code Editor
上記の4つになります。

個人ではVisual Studio Communityを使用することが多いと思います。
また、Macであれば基本的にはXCodeを使用することになるでしょう。
この記事ではVisual Studio CommunityかVisual Studio Professionalを使用することを想定しています。

ですが、他の選択肢もあるので、先ずはそちらの紹介から。
UE4.18からはVisual Studio Codeを使用することが可能になりました。
詳しくはalweiさんがブログにまとめてくださっています。
http://unrealengine.hatenablog.com/entry/2017/10/26/215621
比較的動作が軽いようで、ちょっとビルドして動かしてみるにはいいかもしれません。

もう一つのおまけ機能として
Code EditorというPluginがあります。
f:id:PaperSloth:20171125111743p:plain
Editorからソースコードの編集、コンパイルを行うことができます。
こちらもalweiさんがブログにまとめてくださっています。
http://unrealengine.hatenablog.com/entry/2017/05/08/220000
Visual Studio等と組み合わせてちょっとした編集を行う時だけ利用するにはいいと思います。


Unreal C++を書きやすい環境を構築する

Unreal C++をかくにあたって、Visual Studioの設定を変更することをオススメします。
設定をしていないとエラーでない箇所に赤線が入ったりとコードが見にくくなってしまうことがあります。

これに関しては下記のドキュメントに詳しい設定が記載されています。
https://docs.unrealengine.com/latest/JPN/Programming/Development/VisualStudioSetup/index.html
因みに私の環境はVisual Studio 2015ですが、UE4.15以降はVisual Studio 2017が推奨されています。

また、ドキュメントの下部に記載されている2つの機能を導入することを推奨します。
Unreal VS
Unreal VSではVisual Studio内でプロジェクトをリフレッシュできたり、
Batch Builderが使用できたりとメリットがいくつかあります。
詳しくは下記ドキュメントに記載があります。
https://docs.unrealengine.com/latest/JPN/Programming/Development/VisualStudioSetup/UnrealVS/index.html

UE4 Visualizer for Visual Studio
デバッグを行う上での拡張機能がサポートされるようになります。
例えばTArray等の中身などがより見やすい形で出力されるようになります。


Copyrightの表記を設定する

こちらは先日私のブログにまとめました。
短い内容ですが目を通していただければと思います。
http://papersloth.hatenablog.com/entry/2017/11/15/232411
仕事で開発を行う際はCopyrightを必ず記載しますし、個人でもあった方がよいでしょう。
現状は1行しか書けないのが少し不便です。


Debug Symbolをインストールする

BlueprintのみのProjectを作成していた方には基本的に無関係の機能になります。
こちらも詳しくはalweiさんがブログにまとめてくださっています。
http://unrealengine.hatenablog.com/entry/2016/05/07/210000
特にPlugin開発を行う可能性があるという人は入れておいた方が良いでしょう。


Code Snippetsを設定する

Unreal C++のマクロ等を都度入力していると長い名前のものが多くタイプミスに繋がります。
Code Snippetsの導入でストレスなく開発ができるようになるでしょう。

UE4には標準のSnippetsがあります。
Launcherではなく、GitやPerforceから落としてきたエンジンにしかデータが含まれていませんので、注意してください。
Engine/Extras/VisualStudioSnippets以下に標準のSnippetsがあります。
こちらは自分用にカスタマイズして使いやすいように設定してみてください。


Code View Pluginを有効にする

f:id:PaperSloth:20171125112414p:plain
Code View Pluginを有効にするとEditor上で選択したActorのクラス、関数の一覧が見れるようになります。
DetailsパネルのCode Viewカテゴリにクラス名と関数名が表示されます。
f:id:PaperSloth:20171125113830p:plain
クラス名または関数名をダブルクリックするとソースコードが開かれます。
Engine側のクラス、関数の場合は該当するファイルを開くだけですが
自分が定義した関数の場合はその関数が記述されている箇所が開かれます。


まとめ

Visual Studioを使用する場合はドキュメントに沿った設定をしよう。
・Debug Symbolをインストールしよう。
・Code Snippetsを登録しよう。

・Project SetteingsはCopyrightを記述するだけ。
・PluginはCode Viewがオススメ。Code Editorはお好みで。

明日はrarihomaさんによる
[UE4] Event Graph に最初からある半透明の BeginPlay アレ何なの? – rarilog です。
楽しみラリ~

Lumberyard 新規プロジェクト作成方法

この記事はLumberyard Advent Calendar 2017の8日目の記事です。
Lumberyard Advent Calendar 2017 - Qiita

環境

Lumberyard 1.10.0.0
Lumberyard 1.11.1.0
Lumberyard 1.12.0.0


新規プロジェクトを作成する(Lumberyard 1.10, 1.11)

先ず新規プロジェクト作成を行うと下図のようにBuildでエラーとなってしまいます。
f:id:PaperSloth:20171202190631p:plain


とりあえずログを見てみましょう。
ログファイルは"Lumberyard\(EngineVersion)\dev\BinTempの中にあります。
lmbr_create.logというテキストファイルです。


すると、早速エラーが見つかりました。
「Lumberyard\(EngineVersion)\dev\Code\Framework\AzCore\AzCore\EBus\EBus.h:
 error C2220: 警告をエラーとして扱いました。'object' ファイルは生成されません。」
f:id:PaperSloth:20171202192136p:plain

EBus.hでエラーが出ているようですね。
C2220のエラーコードは下記を参照。
コンパイラ エラー C2220

要するに警告をエラーとして扱っているため、ビルドに失敗になるようです。


それと、もう一つ気になったのがWarning
「warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。
 データの損失を防ぐために、ファイルを Unicode 形式で保存してください。」
C4819のエラーコードは下記を参照。
コンパイラの警告 (レベル 1) C4819

直ぐに解決しそうなので、EBus.hの文字コード
Unicode(UTF-8 シグネチャ付き) - コードページ 65001」に変更します。
f:id:PaperSloth:20171206212505p:plain


一旦ここで再度新規プロジェクト作成を行ってみます。
Lumberyard1.10.0.0ではこれで作成できるようになりました!
f:id:PaperSloth:20171206212822p:plain

Projectフォルダは"Lumberyard\(EngineVersion)\dev\(ProjectName)"にあります。
Solutionファイルは"Lumberyard\(EngineVersion)\dev\Solution"にあります。


もし、この段階でもプロジェクトが作成できない場合は同様に
エラーが出たファイルをUnicode形式で保存していきます。

以前に1.11でプロジェクトを作成できないという問題がありましたが
行の終わりをWindows(CR LF)で保存していたことが原因でした。


新規プロジェクトを作成する(Lumberyard 1.12)

Empty Templateプロジェクトの場合は特に問題なく作成できると思います。
f:id:PaperSloth:20171227161348p:plain


Default Templateを指定した場合
この場合は幾つかエラーが出るので、1つずつ解決していきます。
1.10, 1.11と同様にUnicode BOM有で保存していくだけです。

エラーが出る箇所は下記の5ファイルです。
Lumberyard\1.12.0.0\dev\Gems\EMotionFX\Code\EMotionFX\Source
・AnimGraph.cpp
・MultiThreadScheduler.cpp
・MeshBuilder.cpp

Lumberyard\1.12.0.0\dev\Gems\EMotionFX\Code\EMotionFX\Rendering\Common
・FirstPersonCamera.h
・FirstPersonCamera.cpp

1.10と1.11で出ていたエラーは直っています。
EMotionFXとは1.12から追加されたLumberyardの新しいアニメーションシステムです。

また、1.12からはプロジェクトを開いて新規レベルを作成するとPerforceのError Messageが出ますが動作上は問題ありません。


新規プロジェクト作成はできましたでしょうか?
ようこそ!Lumberyardへ!

Lumberyard Lua入門

この記事はLumberyard Advent Calendar 2017の5日目の記事です。
Lumberyard Advent Calendar 2017 - Qiita

環境

・Lumberyard 1.11.1.0


概要

LumberyardでのLuaの記述についての記事を書きますが
極力Unity, UE4の例も出して多くの方にイメージが伝わるように書ければと思います。
また、初めてのLuaですので誤りがあれば指摘いただけると幸いです。


新規Entityの作成

Level上で右クリックをして、Create enitityで作成します。
f:id:PaperSloth:20171203184657p:plain

ここで作成されたコンポーネントエンティティシステムは
現在はPreviewで絶賛開発中のようです。
コンポーネントエンティティシステム - Lumberyard

古いシステムのEntity Systemと置き換わるようです。
エンティティシステム - Lumberyard

このEntitySystemは
UnityでいうところのGame Object
UE4でいうところのActorといった感じでしょうか。


Luaの追加

作成したEntityにAdd Componentから
f:id:PaperSloth:20171203185153p:plain

LuaScriptを選択します
f:id:PaperSloth:20171203185306p:plain

Unityのスクリプトの追加に近いイメージなので、Unityユーザーにはイメージしやすいかもしれませんね。

続いて、LuaScriptの”{ }”ボタンを押すとLua Editorが開きます。
f:id:PaperSloth:20171203185512p:plain

f:id:PaperSloth:20171203185543p:plain

とりあえずここで一度Scriptを保存しておきます。
今回はStarterGameのプロジェクトを使用しているので
dev/StarterGame/Scriptsの下にComponentsフォルダを作成し、Sample.luaという名前で保存します。
f:id:PaperSloth:20171203190251p:plain


ここでちょっと特殊なのが、この段階ではこのスクリプト
Entityに関連付いていません。
なので、このLuaScriptを参照するように設定します。
LuaScriptの”...”ボタンを押します。
f:id:PaperSloth:20171203190642p:plain

すると、下図のようなWindowが開くので、先程保存したLuaを指定します。
f:id:PaperSloth:20171203190729p:plain

指定するとそのScript名が表示されます。
f:id:PaperSloth:20171203190823p:plain


初めてのLua「HelloWorld」

とりあえずはHelloWorldから始めましょう。
Luaについては先ずはこのドキュメントから読み始めると良さそうです。
コンポーネントエンティティシステムで使用する Lua スクリプトの作成 - Lumberyard

sample=
{
}

function sample:OnActivate()
    Debug.Log("Hello World")
end

return sample

OnActivateはUnityでいうStart()、UE4でいうBeginPlay()といったところでしょうか。
早速実行してみましょう。

無事にConsoleにHello Worldが出てきました。
f:id:PaperSloth:20171203203930p:plain


変数(プロパティ)の追加

続いてPropertiesテーブルを追加してみます。

sample=
{
    Properties=
    {
        HitPoint =
        {
            default = 100.0,
            min = 0.0,
            max = 500.0,
            description = "Player HitPoint"
        }
    }
}

function sample:OnActivate()
    Debug.Log("Hello World")
end

return sample

Unity C#で書くと

 [SerializeField, Range(0.0f, 500.0f)]
float HitPoint;

UE4の場合は
Blueprintだと
変数でfloatを作成し、Min, MaxのRangeを指定した状態ですね。
Unreal C++だと

UPROPERTY(EditAnywhere,  BlueprintReadWrite, meta=(ClampMin = "0.0", ClampMax = "500.0"))
float HitPoint;

追加したら無事に反映されました。
f:id:PaperSloth:20171203211056p:plain


更新処理と終了処理の追加

ここまででプロパティの追加、初期化が分かりました。
あとは更新と終了処理があれば何か動くものが作れそうです。
UnityだとUpdate()とOnDisable()
UE4だとTick(float DeltaTime)とEndPlay()ですね。

というわけで、更新処理と終了処理を追加しました。

sample=
{
    Properties=
    {
        ActivateLogMessage = "",
        HitPoint =
        {
            default = 100.0,
            min = 0.0,
            max = 500.0,
            description = "Player HitPoint"
        }
    }
}

function sample:OnActivate()
    Debug.Log(self.Properties.ActivateLogMessage)
    self.tickBusHandler = TickBus.CreateHandler(self)
    self.tickBusHandler:Connect()
end

function sample:OnTick(DeltaTime)
    Debug.Log("Call Every frame message")
end

function sample:OnDeactivate()
    Debug.Log("OnDeactivate!")
    self.tickBusHandler:Disconnect()
end

return sample

しれっとOnActivate()でActivateLogMessageという新しいプロパティが使用されていますが
これはPropertiesへのアクセス方法を示したかっただけですので、特別な意味はありません。

先ずは終了処理から見ていきましょう。
構文は下記のような形でOnActivate()が分かれば理解は簡単ですね。

function scriptname:OnDeactivate()
end

問題は更新処理の呼び出し方です。
Lumberyardで更新処理を呼び出すにはシステムのTickBusから通知を受け取る必要があるようです。
そのため、初期化時にはTickBusハンドラーの作成と接続を行い、終了時には切断を行う必要があります。

function sample:OnActivate()
    -- TickBusのハンドラーを作成
    self.tickBusHandler = TickBus.CreateHandler(self)
    -- TickBusとの接続
    self.tickBusHandler:Connect()
end

function sample:OnDeactivate()
    -- TickBusの切断
    self.tickBusHandler:Disconnect()
end

実行してみるとログが正しく出力されていることが確認できました。
f:id:PaperSloth:20171203214925p:plain


今回の入門編は以上になります。
初めてのスクリプト言語でかっても分からないことも多く、苦戦しました。
あとはスクリプト間の通信方法と衝突判定の通知の受け取り方が分かればゲームが作れそうな気はします。

今後も色々とLumberyardの入門記事が出てくるとうれしいです!

Lumberyard レベル作成時の海の消し方

この記事はLumberyard Advent Calendar 2017の3日目の記事です。
Lumberyard Advent Calendar 2017 - Qiita

環境

・Lumberyard 1.11.1.0


新規レベルの作成

先ずはLumberyardを立ち上げます。
今回はStarterGameというサンプルプロジェクトを使用しています。
f:id:PaperSloth:20171202180824p:plain

新規レベルを作成するには起動時に開いたWindowのNew Levelボタンを押します。
f:id:PaperSloth:20171202181000p:plain

もしくはFile > NewかCtrl + Nでも作成できます。
f:id:PaperSloth:20171202181314p:plain

すると、このWindowが出てくるので
Level名、Terrainを使用するか否か、ハイトマップの解像度、テクセルあたりのメートルを決めます。
f:id:PaperSloth:20171202181603p:plain

ここで、Terrainを使用してもしなくても綺麗な海が作成されます。
f:id:PaperSloth:20171202182021p:plain


海を消す

ゲームによっては海はいらないという場合や
PCスペック的に消したい等の理由で消したい場合があると思います。

この海は選択してDeleteができないので、少し戸惑いますがちゃんと非表示にできます。

先ずはTerrain Editorを開きます。
Tools > Terrain Editor
f:id:PaperSloth:20171202182325p:plain

Terrain Editorのメニューから削除が可能です。
Modify > Remove Ocean
f:id:PaperSloth:20171202182602p:plain

消えた!
f:id:PaperSloth:20171202182714p:plain



Lumberyardはまだまだ日本語での情報が少なく、海1つ消すのですら戸惑ってしまいます。
どんどん情報が増えて活発なコミュニティーになるといいですね!

UE4 ProjectのCopyrightの変更方法

目次

・Copyrightの変更方法

環境

・Unreal Engine4.17.2

Copyrightの変更方法

UE4C++コードを追加した際に最初の行にCopyrightを記載してくださいという旨が表示されます。

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "ClassName.generated.h"

文章のままなんですが、Project Settingsから変更を行います。
下図のようにProject Settings → Project - Description内にあります。
f:id:PaperSloth:20171115231358p:plain

あとはここを書き換えるだけで、新規C++クラスを作成した際にCopyrightが追加されます。

また、以前から改善の要望はでているのですが、複数行のCopyrightを記述することができません。
エンジンを直接書き換えれば実現は可能なのですが、このためだけに改造するのは避けたいですね。

該当箇所は下記になります。
/Engine/Source/Runtime/EngineSettings/Classes/GeneralProjectSettings.h

修正前

	/** The project's copyright and/or trademark notices. */
	UPROPERTY(config, EditAnywhere, Category=Legal)
	FString CopyrightNotice;

修正後

	/** The project's copyright and/or trademark notices. */
	UPROPERTY(config, EditAnywhere, Category=Legal, meta = (MultiLine = "true"))
	FString CopyrightNotice;

おそらくこれで正しく動作すると思います。
このためだけにカスタムビルドを作成するのは手間なので、動作は未確認です・・・
動作確認を行いました。
まずエディタを再起動すると2行目以降が削除されてしまいました。
また、1行目に // が入っているため
/*で書き始めたい場合少し不便です。
そのため、基本的には1行にするのが良さそうですね。

UE4 ゲーム内で動画を再生する方法

目次

・動画再生可能なフォーマット
・動画再生を行うには
・まとめ

環境

・Unreal Engine4.17.2
・Windows10

Mac, Linux, iOS, Android等の確認は行っていません。

動画再生可能なフォーマット

Platformごとに使用可能なフォーマットは公式ドキュメントに記載があります。
Unreal Engine | メディア フレームワークの技術リファレンス

サポート対象のファイル、URL、キャプチャ デバイスより2017/10/30段階での対応画像も貼っておきます。
f:id:PaperSloth:20171030234044j:plain

Windowsで.aviと.mp4が対応されていることが確認できました。
今回はこの2つの動画フォーマットについて書きます。
他のフォーマットでもプラットフォームで対応されているものであれば、再生可能だと思います。

動画再生を行うには

Windowsで再生するためには
 Windowsで再生をするためには下記プラグインを有効にする必要があります。
 基本的には有効になっているかと思いますが、パッケージ容量削減のために無効にしている場合は注意が必要です。
 f:id:PaperSloth:20171030235522p:plain
WMFとはWindows Media Foundationの略称です。
Microsoft Media Foundation (Windows)

調べてみると難しそうな用語が並んでいますが、ざっくりいってしまうと
「マルチメディアを扱うためのMicrosoftAPI群」です。


②動画をインポートする
先ず、動画の保存先には注意が必要です。

Content/Movies以下に動画ファイルを保存する必要があります。

続いて.aviと.mp4で違いがあります。

先ずはaviについて。
こちらは凛さんがブログにまとめてくださっています。
UE4 UMGでムービー(動画)を再生する 凛(kagring)のUE4とUnityとQt勉強中ブログ

直接Media Playerが生成されれば、そこからMedia Textureを生成してマテリアルに適用する等で直ぐに再生が可能ですね。


続いてmp4の場合について。
mp4をインポートしてみると下図のようにFile Media Sourceが生成されると思います。
f:id:PaperSloth:20171031001221p:plain


Windowsで再生するために設定を変更する
先程インポートして生成されたFile Media Playerの
Windowsの欄をWMFに変更します。
この際に①で挙げたプラグインのWMF Media Playerが無効だと選択できません。
f:id:PaperSloth:20171031001835p:plain


④Media Playerを作成する
MediaからMedia Playerを作成します。
f:id:PaperSloth:20171031002505p:plain

すると下記のWindowが表示されます。
今回は動画ですので、下のVideoにチェックを入れましょう。
f:id:PaperSloth:20171031003232p:plain

作成すると下記のように
Media PlayerとMedia Textureが作成されます。
f:id:PaperSloth:20171031003429p:plain


Media Playerを開いてみると下図のようなUIが表示されると思います。
そこで、Playを押下して動画が正しく再生されることを確認しておきましょう。
今回はテスト用にContentExampleのMediaExampleを使用してみました。
f:id:PaperSloth:20171031002800p:plain


⑤再生する
再生するためにはマテリアルを作成する必要があります。
今回はStaticMeshに貼り付けてみました。
UIで表示したい場合は先程の凛さんのブログが参考になります。
基本的にはマテリアルがSurfaceかUserInterfaceかくらいの違いしかありません。
f:id:PaperSloth:20171031004537p:plain


f:id:PaperSloth:20171031004621p:plain


このマテリアルをStaticMeshに貼り付けただけでは再生されません。
Media Playerの設定を確認してましょう。
確認すべき箇所はDetailsのPlaybackの項目です。
f:id:PaperSloth:20171031004904p:plain

- Play on Open
Open Source等のノードが呼び出された際に自動で再生するか
- Shuffle
Play Listを設定した場合にシャッフル再生を行うか(動作未確認)
- Loop
動画再生終了時にループ再生を行うか


今回はPlay on Openだけチェックが入っていることを確認しましょう。


最後に再生したいタイミングで(今回はレベル開始時)Open Sourceを呼び出します。
Media Playerの変数を作成して、そこに再生したいMedia Sourceを登録するだけです。
f:id:PaperSloth:20171031011434p:plain

もしも、Play on Openにチェックを入れていない場合は下記のようにPlayノードを呼び出します。
f:id:PaperSloth:20171031005511p:plain


しかし、これでは動作しないことがあります。
その場合はDelayを入れるか別のタイミングでPlayを呼び出してみましょう。

f:id:PaperSloth:20171031005639p:plain


Planeに貼り付けてみるとこんな感じになりました!
f:id:PaperSloth:20171031010048p:plain

まとめ

説明が長いせいで複雑な印象を与えてしまったかもしれません。
簡単におさらいします。
①動画インポート
 File Media Sourceの設定を変更
②Media Player作成(同時にMedia Textureも作成される)
③Media Textureを使用したMaterial作成
 UIの場合はUserInterfaceに変更しておく
④MediaPlayerの変数を作成
⑤OpenSource, Playノードを呼び出す
Media Playerで再生しようとした時にエラーが出た場合は動画の保存場所を疑ってみましょう。
Content/Movies以下に保存する必要があります。


・使用例
VRと組み合わせることで映画館が作れそうですね。
インゲームではPVを流したり、チュートリアルの説明に活かせそうです。


・プラットフォーム対応について
今回は説明が長いため、省略しましたがプラットフォームごとに別の解像度、別のフォーマット、別の動画を再生したい場合
Media/Platform Media Sourceを使用しましょう。
すると、プラットフォームごとのFile Media Sourceの設定が可能になります。

UE4 検証で使用する際のBlueprint運用

目次

デバッグ用、無効なノードを設定する
・検証用のノードを用意する
・まとめ

環境

・Unreal Engine4.17.2

デバッグ用、無効なノードを設定する

Unreal C++で開発を行っている際はプリプロセッサの定義済みマクロを使用してDebug用のコードや検証用のコードを記述すると思います。
Blueprintではプリプロセッサ命令ほど便利ではありませんが、Compile Optionという便利な機能が用意されています。


Compile Optionを使用するにはエディターの環境設定を変更する必要があります。
Editor Preferences → ContentEditors → Blueprint Editorの中に設定項目があります。
Experimental → Allow Explicit Impure Node Disablingを有効にしましょう。
言葉で説明すると複雑ですが、図の項目を有効にするだけで使用可能になります。
f:id:PaperSloth:20171008002135p:plain


ノード上で右クリックするとCompileOptionsが選択できます。
f:id:PaperSloth:20171008001340p:plain

選択できるオプションは3つ用意されています。
 1.Disable(無効化)
 2.Enable Always(有効化)
 3.Enable Development Only(DevelopmentBuildで有効化)

Disableにすると上記画像のようにノードが半透明の状態になります。
EnableはAlways, Development Onlyのどちらにしても見た目上の違いがなさそうなので運用に注意が必要です。


検証用のノードを用意する

※ここで紹介する手法は個人的にこういうやり方をしているというだけの事例紹介です。

先ず、Blueprintで開発を行っているとプロジェクトが進むにつれてBlueprintが複雑になっていくと思います。
特にプレイヤー関連は大凡どのジャンルのゲームでもBlueprintが肥大化してしまうと思います。
下記はRoboRecallのプレイヤー関連のノードです。
f:id:PaperSloth:20171008005032p:plain

特別複雑でもないので追えなくはないですが、もう少し整理できそうな感じですね。

では、複雑にならないようにするために。
検証でどかっと書いた部分を分けることが出来れば整理する時にも楽そうだなと感じます。


それでは私が使用している手順を紹介します。

①BeginPlay, Tickをメイン開発用と検証用で分ける。
下図のような感じで複雑に組まれたプレイヤーがあると仮定します。
図ではノード一つですが、ごちゃごちゃしていると想像してください...
f:id:PaperSloth:20171008011009p:plain

そこに下図のような感じで検証用の初期化関数と更新関数を追加します。
今回はCustom Eventで追加しました。
f:id:PaperSloth:20171008011417p:plain

検証用のノードは先程紹介したCompile Optionを設定して開発専用にしたり無効にしたりします。
こうすることで大きなPlayerのBlueprintを複製せずとも検証用の要素を気軽に追加できます。


②検証用ノードを明確に分かるようにする。
単純にCustom Eventを追加しただけでは、管理の複雑さは変わりません。

そこで、検証用は全てEvent Graphを分けます。
Event Graphの追加はMy Blueprint WindowのGraphsから行えます。
f:id:PaperSloth:20171008012106p:plain

今回は下図のように追加しました。
f:id:PaperSloth:20171008012430p:plain

これで準備は整いました。
あとは検証用のノードグラフに好きなように色々と記述してください。
f:id:PaperSloth:20171008012957p:plain

Custom EventのCompile Optionsを変更して不要な検証用の要素は手軽に無効にできそうですね。
こんな感じで思い切ってEvent Graphを分けてみるのもいいかもしれません。

・まとめ

- BlueprintのCompile Optionsを活用しよう
 ただし、この機能は4.17.2時点でもまだ実験的機能なので注意。

- Event Graphを分けよう
 今回の使い方に限らず、Blueprintの管理がもっと簡単になるはず。
 ただし、何事もほどほどに。増やし過ぎると管理できなくなってもっと複雑になります。

- 今回検証していないこと
 Development Only, Disableにしていた場合に呼び出し先で
他のActorとの依存関係があった場合はパッケージングした際に未使用にも関わらずパッケージ内に含まれたりしないか。