僕の私のUnrealな日々

UE4のBluePrintを使って小さなギミックを作ったりしてます。ブログを通じて情報共有ができたらなと思います。

UE4:Eventノードを使った簡単なBluePrintの作り方

 

 いろいろあって作ったBluePrintの記事ですが、もうすべて水に流しました。

 

Eventの特徴

よく使われるノードの特徴をあげ、例を上げていきたいと思います。

Event Begin Play

イベントを開始するためのノード

 

Event Destroy

ActorがDestroyした時にこのEventが作動する

キャラクターが消えた時に煙のエフェクトが出るようにしてみよう

 

 

LevelBluePrintでKey【i】を押すとキャラクターがDestroyするようにします。

f:id:Bussan_dayo:20150131151225p:plain

 

 

 

MycharactorのBluePrint内でイベントDestroyを設置しSpawn Emitter at Locationノードを置きます。

Spawn Emitter at Locationで煙のエフェクトを設定します。

 

f:id:Bussan_dayo:20150131151301p:plain

Play

この状態でKey【i】を押すと

 

f:id:Bussan_dayo:20150131151312p:plain

煙のエフェクトが発生します。

f:id:Bussan_dayo:20150131151314p:plain

 

(追記:Event DestroyはEvent Endに統合されるらしいという噂を聞いたのですが本当かな?)

 

 

Event Tick

フレームごとに呼び出されるイベントノード。

 Play中の経過時間の表示してみよう!

LevelBluePrintで変数Floatを宣言しTimeと名付けます

f:id:Bussan_dayo:20150131151748p:plain

EventTickの特徴であるフレームごとの出力をTimeと足し合わせ変数に代入していきます。

それを出力NodeのPrintStringノードにTimeを設定します。

 f:id:Bussan_dayo:20150131151749p:plain

Play

左端に経過時間が表示されます。

 f:id:Bussan_dayo:20150131151751p:plain

 

Custom Event 

イベントを自作することが出来る機能を持つノード

カスタムイベントを使用して岩を回転させてみよう!

 

まずカスタムイベントを作成しRotationという名前にします。

そしてAdd Actor Local Rotaitonノード(ActorをYaw,Pich,Rollするときに使用するノード)につなげ横に回転出来るようにします。

EventTickを使いPlay時間をSETします。そしてブランチを使用し3秒後先ほど作ったカスタムイベントを呼び出す用にします。

 

f:id:Bussan_dayo:20150131152023p:plain

 

Play

プレイ直後

 f:id:Bussan_dayo:20150131152025p:plain

3秒後

f:id:Bussan_dayo:20150131152026p:plain

 

 

Event Actor Begin Overlap

アクターが他のアクターにオーバーラップした時に作動するイベント

 

Event Actor End Overlap

アクターが他のアクターから出た時に作動するイベント

 

特定の範囲に入ったらライトを付けてみよう!

まずライトを設置します

 

f:id:Bussan_dayo:20150131152447p:plain

ライトをBluePrint化し、PointLightを設置します。

 

f:id:Bussan_dayo:20150131152500p:plain

この時Visibleは解除しておく。(Visibleを解除することによってPlay時に光が消える)

 

f:id:Bussan_dayo:20150131152549p:plain

Boxを追加して設置します。この場合BoxがOverLap判定をすることになります。

 

f:id:Bussan_dayo:20150131152602p:plainf:id:Bussan_dayo:20150131152606p:plain

 

グラフに移りBoxをクリックした状態でBluePrint内を右クリックするAdd for Event Boxと表示され、そこでOnComponentBegineOverlapとOnComponentEndOverlapを設置します。

 

f:id:Bussan_dayo:20150131152709p:plain

 

BluePrint上にPointLight1を設置し取得を選択します。そしてPointLight1から線を引っ張りToggleVisiblityノードを出しOverLapノードをつなげます。

f:id:Bussan_dayo:20150131152718p:plain

 

 

Play

Box外にいるとき

 f:id:Bussan_dayo:20150131152748p:plain

 

Box内に入った時

 

f:id:Bussan_dayo:20150131152801p:plain

 

 

Event Hit

アクターのコリジョンと他のアクターのコリジョンがぶつかり合った時に起こるイベント

My Comp

PrimitiveComponent - ヒットされた実行中のアクタ上のコンポーネント

Other

Actor - コリジョンに関わるもう一方のアクタ。

Other Comp

PrimitiveComponent - ヒットされたコリジョンに関わるもう一方のアクタ上のコンポーネント

Self Moved

Boolean -

Hit Location

Vector - 衝突する 2 つのアクタ間のコンタクト位置。

Hit Normal

Vector - コリジョンの方向。

Normal Impulse

Vector - アクタが衝突する力。

Hit

Struct Hit 内に収集されたすべてのデータである「HitResult」を引っ張り出し、この結果を「細分化して」個々のデータへのアクセスすることができます。

 

球を発射してオブジェクトとあたったら爆発のエフェクトが発生するようにしよう!

FPS用のプロジェクトを作成し、BluePrintsからMyProjectileを選択しBluePrintを編集します。

f:id:Bussan_dayo:20150131152934p:plain

f:id:Bussan_dayo:20150131152952p:plain

 

 

MyProjectileのBluePrintはまず球が当たった瞬間物理シュミレータが設定されているものかBrunchで判断しもしTrueな場合物理シュミレータが設定されているActorが動き、その後球が消えるといったプログラムになっています。今回はすべてのActorやオブジェクトにHitした際に爆発のエフェクトを出すようにするので、ブランチの前にノードを設置します。

 

f:id:Bussan_dayo:20150131153002p:plain

 

ブランチの前にSpawn Emitter at Locationノードを設置します。LocationにはイベントHitのHit Locationにつなげることで爆発のエフェクトをオブジェクトにあたった部分のLocationから出すことが出来ます。

 

Play

f:id:Bussan_dayo:20150131153027p:plain

 

 

Mouse Input

Event Actor Begin Cursor Over イベントアクタービギンカーソルオーバー

アクターにマウスのカーソルを当てた時にイベントが行われる

 

Event Actor End Cursor Over イベントアクターエンドカーソルオーバー

アクターにマウスのカーソルが外れた時にイベントが行われてる

 

Event Actor on Clicked イベントアクターオンクリック

アクターをクリックした際にイベントが行われる

 

Event Actor on Released 

アクターをクリックしてリリースした際に行われる

 

Mouse Inputを使用してカーソルがオーバーした時にオブジェクトが上がりカーソルが外れる時に元の位置戻るオブジェクトを作ってみよう。

 

MouseModeの設定方法

Controller設定

コンテンツブラウザから新規→ブループリント→PlayerControllerを選択。

作成したブループリントを右クリックしエディットの設定を選択する。

そこから、[ShowMouseCurser],[Enable Click Event],[Enable Mouse Over Event]にチェックをつける。

GameModeの設定

コンテンツブラウザから新規→ブループリント→GameModeを選択。

エディットの設定からPlayer Controller Classを先ほど作ったPlayerControllerに設定する。

ワールド設定

World Settingを選択しGameModeを先ほど作ったGameModeを選択する。

これでMouseModeが完了である。

 

まずブループリントを作成し、エディタのグラフを開く。

イベントActor Begin Cursor OverとActor End Cursor Overのノードを設置し以下のようにノードを配置する。

 

 

f:id:Bussan_dayo:20150131153206p:plain

まずActorの位置情報をベクトル変数に代入します。イベントが始まるとGetActorLocation(アクターの位置情報を取得するノード)から宣言したベクトル変数に代入のが一番上のノードら。

 

SetActorLocationはActorのLocation、つまり位置を変えるノードです。

今回はアクターをZ軸に移動したいので変数を呼び出してZ軸のみ数値を足します。SetActorLocationのLocationにつなぎます。

 

次にカーソルが離れた時に元の位置に戻る動作を入れるのでもう一方のSetActorLocationに変数を呼び出してつなぎます。今回はわかりやすくするためにカーソルがオーバーしたらBegin Cursor Overとカーソルが離れたらEnd Cursor Overを出力するようにします。

 

Play

カーソルがオーバーした時

 

f:id:Bussan_dayo:20150131153316p:plain

カーソルが離れた時

 

f:id:Bussan_dayo:20150131153325p:plain

 

 

と、誰が得するのかわからないEventノードを使用した簡単なBluePrintの作り方でしたが、作成して一ヶ月後に見てみるとこれはボツになりますね・・・。友人の判断は間違ってなかったんや・・・

 

作成していた時は疲れきっていて文章がめちゃくちゃですが、今更編集するのもめんどくさいんで原文ママです。

 

以上です。