カスタムイベントについて

ブループリントを使っていて、「BiginPlayとかティックとか、元々入ってるイベント以外の作り方はどうするのか?」と思っている人もいると思います。

そこで、今回は自作のイベントノード=カスタムイベント作成方法について記述します。

前回の タイムラインを使ってアクタの状態を変化させる - ゆきメも で作成した、ドアを改変して、スイッチが押されるとOpenというイベントが開始されるようにし、Openイベントが開始されるとドアが開くように作り変えてきます。

まず下準備のスイッチの作成から。
モードからCylinderをクリック&ドロップで表示させます。
そして、表示されたCylinderを選択しブループリント編集からブループリントを作成します。名前はCylinder_BPとし、保存先は各自指定してください。

はじめに見た目や判定の設定をするので、ビューポートを選択してください。

f:id:inzery2:20161110231703p:plain

まず、今のままではスイッチが大きすぎるので、適切な大きさに設定します。

画面左上のコンポーネントから、StaticMeshComponentを選択します。詳細にトランスフォーム欄があるので、拡大縮小のX,Y,Zをそれぞれ(0.5,0.5,0.1)と設定し、スイッチらしい形にします。

次に、あたり判定を置くために、コンポーネントからStaticMeshComponentの直下にBoxCollisionを設定します。名前はTriggerとしておきます。

f:id:inzery2:20161110232308p:plain

Triggerの位置や大きさはこのままでも問題なく動作するのですが、スイッチの上にトリガーがある方が好ましいのでロケーションのZ座標を100cmとしておきます。

これで準備は終わりました。あとはOpenイベントを作成し、流れにそってノードを繋げると完成となります。

カスタムイベントの作成はとても簡単です。
一度Cylinder_BPを離れ、doorのブループリントを開きます。

①イベントグラフの何もない箇所を右クリックし、カスタムイベントを追加をクリック。
②名前をOpenにする。

これだけです。あとはBeginPlayとタイムラインノードのPlayを切断し、OpenとタイムラインノードのPlayを接続してdoorでの操作は終了です。コンパイルを忘れないようにしてください。

次に、レベルブループリントから、スイッチが押される(Cylinderに物がOverlapする)とOpenイベントが開始されるようにイベントグラフをいじって完成となります。

レベルビューからCylinderを右クリックし、イベントを追加>OnActorBeginOverlapを選択することでレベルブループリントに簡単にOverlapノードを作成できます。次にもう一度レベルビューからDoorを選択した状態でレベルブループリントに行き、何もない箇所で右クリックしDoorのリファレンスを作成を選択します。(状況に合わせた表示にチェックがないと表示されない恐れがあります)doorからピンを伸ばし、カスタムイベントであるOpenを開きます。あとはOverlapイベントとOpenの実行ピンをつなぐとおしまいです。(doorのコンパイルを忘れているとエラーが出る恐れがあります。)

f:id:inzery2:20161110235501p:plain

スイッチの上から物理エンジンとオーバーラップイベントを発生させるにチェックを入れたボックス等を落として、ちゃんとドアが開くようになっていれば成功です。

おつかれさまでした。

f:id:inzery2:20161110235919g:plain

ドアを開ける要領で、スイッチが押されると沈むようにしても面白いかもしれません。興味があれば作成してみてください。