ブループリント間の相互作用(インターフェース、キャスト先)

この記事は、Unreal Engine 4の初心者を対象としており、シーン内のブループリント(BP)間の対話方法について説明しています。



理論のビット



Unreal Engine 4のBPは、プログラミングの概念のクラスです。つまり、コンテナに含まれるアルゴリズムと変数の抽象的な記述です。 BPがシーンに配置されていない(つまり、オブジェクトが作成されていない)限り、それに基づいてオブジェクト(インスタンス)を作成することを除いて、BPで操作を実行することはできません。



たとえば 、BPがBP_playMusicという音楽を再生している場合 、それを機能させて音楽の再生を開始するには、そのBPをステージに配置する(BP_playMusicクラスのオブジェクト/インスタンスを作成する)か、シーンにある別のBPからインスタンスを作成する必要があります。 このオブジェクトには独自の変数の状態があり、ステージ上にそのようなオブジェクトをいくつか配置すると、1つのBPから作成され、共通のクラスBP_playMusicを持ちますが、それらは他のアクターオブジェクトから独立します。 これらのオブジェクトのいずれかが音楽トラックを変更する場合、これはBP_playMusicクラスの他のオブジェクトに影響しません。



インターフェース



BPインタラクションのメインツールはインターフェイスです。 インターフェースとは、特定のBPが、インターフェースで説明されている機能のハンドラーを持っていることのアナウンスです。



たとえば 、BPランプとbp_lampおよびbp_alarmアラームがあり、これらのBPにturnOnおよびturnOff機能が必要です。 インターフェイスを作成します。たとえば、I_turnAbleItemなどの名前を付けましょう。



画像






インターフェイスで、関数turnOnおよびturnOffを追加します。 また、それぞれのアクターの明るさまたは音量を調整できるようにしたいと考えています。 setValue関数と、その中に(float)値パラメーターを追加します。 インターフェイスの関数は非アクティブに見え、ワークスペースでは何も実行できません。 これは、関数の名前とそのパラメーターのみがここで設定され、ロジックの実装が既にBP自体にあるためです。



画像






これで、インターフェイスをコンパイル、保存、閉じることができます。



BP bp_lampおよびbp_alarmを開き、セットアップに移動してI_turnAbleItemインターフェースを追加し、BPをコンパイルします。



画像






したがって、これらのBPにはturnOn、turnOff、setValueイベントハンドラーがあり、これらのイベントの機能を設定できることを示しました。



イベントグラフのコンテキストメニューを呼び出してturnOnと入力すると、異なるカテゴリの3行が表示されます。



イベントの追加-イベントハンドラーを追加します。 これは、別のBPからアクティブ化されたときにロジックを実行するために使用されるものです。





画像






ここで、イベントの追加、インターフェイスで説明されている3つのイベントすべてを追加し、それらが呼び出されたときに実行されるロジックを説明する必要があります。



画像






BPの準備ができました。 アクティベーターとして、トリガーを使用して単純なBP_Buttonを作成します。 キャラクターがトリガーエリアに入った場合、ランプとアラームをオンにし、値= 10に設定します。出てきたら、オフにします。 特定のランプとアラートが既にシーンにインストールされている場合、それらを変数またはオブジェクトの配列としてBP_Buttonアクターオブジェクトに設定できますが、そのようなオブジェクトが数百ある場合、またはそれらが動的に生成され、ゲームが開始する前にそれらがステージにない場合はどうでしょうか? これを行うには、GetActorWithInterface関数を使用できます。 指定されたインターフェイスを持つシーン上のすべてのオブジェクトの配列を返します。 I_turnAbleItemを選択するインターフェイスとして、この関数を使用します。 結果のオブジェクトの配列のループで、各オブジェクトに対してturnOnイベントを呼び出します。



画像






turnOnノードには、エンベロープ記号(メッセージ)が表示され、インターフェイス関数の呼び出しであることを示します。 setValueへの呼び出しも追加します。 指定した値valueをインターフェイスに配置できます。 同様に、endOverlapイベントにturnOffを設定します。 結果は次のようになります。



画像






これで、ステージにランプやアラートをいくら配置しても、キャラクターがトリガーと対話すると、これらすべてのイベントがトリガーされます。



メッセージを介してインターフェイス関数を呼び出すことの利点は、呼び出された関数とのインターフェイスがない場合でも、どのBPでもそれらを呼び出そうとすることができることです。 たとえば、Traceの結果として特定のアクターオブジェクトへのリンクを取得し、それがどのようなアクターオブジェクトであるかはわかりませんが、テキスト表示機能の存在下でテキストを表示できるようにしたいと考えています。 そのような場合には、呼び出しインターフェース(メッセージ)を使用できます。 アクターオブジェクトに呼び出されたハンドラーがある場合、機能します。



タスクを複雑にしましょう。 ランプが点灯していることを確認し、点灯していない場合はメッセージを書き込む必要があります。 これを行うには、turnOn関数のインターフェイスで、出力値(ブール値)の結果を追加します。 コンパイルして保存します。



画像






その後、turn_onイベントが競合するというエラーがBP_lampとBP_alertに現れました。



画像






これで、イベントハンドラは単なるイベントではなく、ロジック用の独自のグラフを持つ関数になりました。 右側のInterfacesブロックで関数名をダブルクリックして開きます。 そこにロジックを追加します。



画像






また、トリガーBPでは、turnOn関数呼び出しノードに戻り結果パラメーターがあり、これにはアクターオブジェクトに設定された値が含まれます。 ランプが点灯しない場合、またはアラームがオンにならない場合は、警告プリントを追加します。 オブジェクト自体へのリンクがあるため、その座標などの任意の情報を取得できます。



画像






これで、I_turnAbleItemインターフェイスを使用してすべてのオブジェクトを制御できるようになり、何らかの問題が発生したオブジェクトをすべてローカライズできます。



にキャスト



BP間の相互作用のもう1つの重要な機能は、「{クラス名}へのキャスト」です。 これは、BP(クラス)をパラメーターとして指定した型にキャストする機能です。 「キャスト」を使用すると、アクターオブジェクトの種類が事前にわからない場合に、アクターオブジェクトのカスタム関数を呼び出すことができます。



たとえば、色パラメータを指定した通常のsetColor関数をBP_lampに追加します



画像






キャラクターに、アクタータイプのアクターオブジェクトを返すTraceハンドラーを追加します。 ランプで作成したsetColor関数がないため、「キャスト先」を使用して、このアクターオブジェクトをBP_lamp型にキャストしようとします。



画像






そして、このアクターオブジェクトが実際にBP_lamp型の場合、「キャスト先」はBP_lamp型のアクターオブジェクトを返し、その上でsetColor関数を呼び出すことができます。 これが他のBPである場合、何もしません。 Cas Toを介したキャストは、Childクラスにも拡張されます。 BP_spotLamp、BP_pointLightクラスのシーンにアクターオブジェクトがある場合、Cast To BP_lampはそれらをBP_lampタイプに正常にキャストし、このタイプのオブジェクトを返します。



画像






ご清聴ありがとうございました!



All Articles