
こんにちはTakumiです。
今回は、他クラスのブループリントのイベントと変数にアクセスする方法を解説していきたいと思います。
他クラスのイベントを呼び出すことができるイベントディスパッチャーの使い方と他クラスの変数にアクセスする方法がわかると、 Unreal Engineで開発できるものの幅が格段に広がるので、ぜひ参考にしてみてください!
イベントディスパッチャーを用いた他クラスイベントの呼び出し方
イベントディスパッチャーとは
クラスブループリントのイベントに作成したイベントディスパッチャーを結合し、 他クラスブループリントに作成したイベントを設置することで、イベントディスパッチャーが呼ばれたら、 他クラスブループリントでのイベントを開始するといった処理をすることが可能になります。
1.イベントディスパッチャーの作成
ここでは、FirstPersonCharaceterとボックストリガーを用いて、 クラスブループリントのイベントと変数へ他クラスブループリントからアクセスする方法について解説していきたいと思います。
まずは、ファーストパーソンテンプレートを指定してプロジェクトを作成してください。
プロジェクトを作成したら、アクタを配置の一覧にあるボックストリガーをFirstPersonCharacterの前に設置します。
ボックストリガーを設置したら、ブループリントを作成してください。
ブループリントを作成したら、コンポーネントのCollosion Componentを選択し、 Add EventからOnComponentBeginOverlapを追加してください。
イベントを追加したら、イベントディスパッチャーを追加します。
ここではイベントディスパッチャーの名前をBoxTouchとしておきます。
イベントディスパッチャーを追加したら、詳細パネルの変数内にあるインスタンス編集可能にチェックを入れてください。
先ほど追加したイベントの先に接続し、コンパイルしてください。
これで、BoxTrigger内にComponentが入ってきたらOnComponentBeginOverlapイベントが発生し、BoxTouchイベントが呼ばれるようになりました。
2.他クラスブループリントでBoxTouchイベントを作成
続いて、他クラスブループリントでBoxTouchイベントを発生させる処理を追加していきましょう。
今回はFirstPersonCharacterのブループリントでBoxTouchイベントが呼ばれたときの処理を追加していきます。
まずは、FirstPersonCharacterを選択して、ブループリントを開いてください。
ブループリントを開いたら、変数を作成して下さい。
ここでは、何の変数なのかが分かりやすいようにBoxTouchとしておきます。
変数の作成と名前の変更が完了したら、変数の型を変更します。
今回使用するイベントディスパッチャーはTriggerBox_Blueprintのものなので、 Trigger Box Blueprintのオブジェクトの参照を選択します。
続いて、変数の型の下にあるインスタンス編集可能にチェックを入れます。
これで、TriggerBox_Blueprintの変数の値を変更することができるようになりました。
続いて、TriggerBox_BlueprintのBoxTouchイベントが呼ばれたときに、FirstPersonCharacter内でBoxTouchイベントが発生するようにするため、 右のイベントの一覧にあるBoxTouchの+ボタンをクリックして、イベントを追加します。
イベントを作成したら、その先にPrint Stringを接続し、BoxTouchイベントが発生したら、テキストが表示されるようにします。
ここで表示させるテキストはBoxTouchとしておきます。
最後に、FirstPersonCharacterのデフォルトの値をなしからTriggerBox_Blueprintに変更します。
これで、TriggerBox_BlueprintのBoxTouchが呼ばれたらFirstPersonCharacter内のBoxTouchイベントが発生するようになりました。
では、プレイしてみましょう!
プレイ開始直後は左上に何も表示されていませんが、前に進んでBoxTriggerに接触するとBoxTouchというテキストが表示されるはずです。
もし表示されなければ、上記のどこかの設定が抜けているので、確認してみてください。
3.他クラスブループリントでの変数の共有
まずは、TriggerBox_Blueprintで共有するための変数を作成していきます。
まずはTriggerBox_Blueprintに他クラスブループリントで共有するための変数を追加して下さい。
今回は、Booleanを用いて他クラスブループリントで共有したいと思います。
名前は何でも構いませんが、ここではわかりやすくShareとしておきます。
変数を追加したら、インスタンス編集可能にチェックを入れてください。
チェックを入れたら、OnComponentBeginOverlapとBoxTouchの間にShare変数のセットを追加してチェックを入れます。
これでBoxTriggerにComponentがOverlapしたらShare変数がTrueになってBoxTouchイベントが呼ばれるようになりました。
プレイ開始時の初期値が分かるように、イベントBeginPlayの先にPrintStringを追加し、Share変数を接続してコンパイルします。
これで、プレイ開始直後にFalseとテキストで表示されるようになりました。
最後に、FirstPersonCharecterブループリントにShare変数を追加していきます。
FirstPersonCharecterブループリントで先ほど作成したBoxTouch変数をドラッグアンドドロップしてGet Box Touchを追加します。
Box Touchリファレンスを追加したら、その先にGet Shareを接続し、以下のようにPrint Stringに接続してください。
これで変数の読み込み設定は完了です。
では実際にプレイして確認してみましょう!
プレイ開始直後はfalseと左上にテキストが表示されます。
その後BoxTriggerに触れたらShare変数がtrueになってイベントディスパッチャーで作成したBoxTouchイベントが呼ばれてShare変数の値を表示しています。
今回の説明では、イベントディスパッチャーと変数の共有をまとめて行いましたが、変数だけの場合も基本的にイベントの共有と同じなので、そこだけ注意するようにしてください。
この設定はよく使用するものなので、Unreal Engineで開発する人はぜひマスターしてくださいね!