ブループリントにはグラフタイプというものがあり、それぞれハッキリとした役割があるのですが、意外と知られていないかもしれません。
前回はブループリント自体の種類を解説しましたが、今回はグラフタイプの違いを解説したいと思います。もっと詳しい情報が知りたい方は公式ドキュメントで!
Unreal Engine | ブループリント ユーザーガイド
ブループリントのグラフタイプ
- イベントグラフ
- コンストラクションスクリプト
- 関数
- マクロ
軽くこれらの違いをまとめます。
グラフ名 | 役割 | 制限 |
---|---|---|
イベントグラフ | イベントハンドリング処理 | なし |
コンストラクションスクリプト | ワールド配置時の初期化 | イベント処理不可 |
関数 | 汎用的な機能追加 | 一部処理不可 |
マクロ | クラス独自の機能追加 | 一部処理不可 |
もう少し具体的な解説を次の項から説明していきたいと思います。
イベントグラフ
ブループリントを開いて、グラフモードに入るとまずはこのイベントグラフというグラフタイプに設定されています。いわばデフォルトのグラフタイプということです。
イベントグラフは全てのイベントを処理させることができ、イベントドリブンのための全ての仕組みを持っています。
ゲームプレイ開始時のBeginPlayイベント、毎フレームごとに呼びだされるTickイベントや、コリジョンがオーバーラップした時のOverlapイベントなどなど、制限なく呼び出すことができます。
なので基本的には全てイベントグラフ上に書いていけばいいのですが、当然それだけでは制限されることもあったりします。詳しいことは後のグラフタイプで説明しようと思います。
コンストラクションスクリプト
コンストラクションスクリプトは他のグラフタイプと比べても最も特殊なグラフです。このグラフタイプが呼び出されるタイミングは一度切りです。それはワールド上に配置された、もしくは生成された時のみに処理が行なわれます。
これはつまりどういうことかと言うと、レベルエディターでオブジェクトを配置した際、その配置した瞬間にのみ呼び出されます。なんと、ゲームを開始時には呼び出されません。つまり毎回Playもしくは再生ボタンを押すたびに呼び出されるというわけではないのです。
ではなぜこんなものが存在しているかと言うと配置した際にだけ呼び出したいというものがあるからです。レベルエディターはゲームを開始していなくても処理を続けています。この時に初期化を行い、何らかの仕組みを入れたいという時に効果的なのがコンストラクションスクリプトということです。
当然イベントの処理は一切できません。もしゲームを開始するたびに初期化を行いたい、という場合はイベントグラフでBeginPlayイベントを利用して、そちらで初期化を行いましょう。
関数
プログラミングでも最もよく使われる関数です。関数は汎用的に機能を追加し、処理をまとめることができます。関数では基本的に一部の入力イベントしかイベントは処理できません。
しかし関数にしか出来ないことがひとつあります。それは他のクラスブループリント上に機能を公開することです。関数を追加することによって他のクラスブループリントでその機能を使用することができるようになります。
他のブループリントでこの機能が使いたい!というような場合は関数化を行い、処理をまとめます。またインターフェースのみを公開したいというような場合でも関数を使用します。
インターフェース宣言では関数は実装をせず、インターフェースを追加したクラス上で独自に関数を実装し、クラスごとに独自の機能を追加して同じインターフェースでやりとりすることができるようになります。
最後に重要なのが、関数には対象となるターゲットが必ず必要です。他のクラス上で使用する場合には必ず対象オブジェクトをどこかしらからか取得しておく必要があります。
マクロ
マクロはクラス自体に独自の機能を追加するユーティリティです。使いやすい機能などをマクロ化することによって、そのクラスに独自の機能を追加します。関数との大きな違いは、外部に機能を公開するわけではありません。
マクロは関数とは違い、そのクラスに対してのみ機能追加を許すので、対象となるターゲットは必要ありません。ターゲットは自分自身ということがわかっているためです。
マクロも関数と同様、イベントは入力イベントの一部のみを処理できます。また関数でも同様ですが、時間を指定するDelay処理やタイムラインノードを扱うこともできませんので注意してください。
これらの制限はマクロライブラリーや関数ライブラリーでも同様です。
使い分け
最初は使い分けが難しいと思うグラフタイプですが、大きな構造になればなるほど重要になってきます。基本はイベントグラフだけで十分ですが、他のクラスブループリントなどでその機能を使わせたい!と思うようになってきたら関数を追加しましょう。
処理が煩雑になってきたと思ったらマクロ化して使いやすくしてみましょう。レベルエディターでワールド上に配置した時に何かやらせたいと思ったらコンストラクションスクリプトに頼ればいいのです。
これだけのことを覚えていればきっとグラフタイプで混乱することはもうないと思います。