News Activity Product Learning red Event Contact
Devblog top img

開発ブログ

2018-02-13

ドアの作り方(後編)

UE4

writer : toppon

ドアの作り方(後編)

前回の記事(http://www.prontiatvr.com/learning/devblog/26)で何かに当たったら開くドアを作りました!

今回は、ここに鍵の概念を追加し、鍵を持っていなければ開かないようにしたいと思います!

※前編の続きからになるので、前編からの続きで見ることをおすすめします。

早速、作っていきましょう!

最初に鍵を持っているかどうかを記録する変数を作りたいと思います。

まず、レベルの画面でFirstPersonCharacterを選択してください。

ここで、右にあるブループリントを編集というものを選び、ブループリントを開いてください。

開いたら、左の変数という欄の+をクリックし、新しい変数を作ります。ここではbool型のbhavekeyとします。

UE4にはbool型変数の頭にbの文字をつけると自動で省略してくれる機能が備わっているので、使うときは「havekey」として使えます。

名前をつけ終わったら左上にあるコンパイルを押してください。これで変数の初期値を設定できるようになります。

今回は最初は鍵を持っていてほしくないので、false(チェックを外した状態)にしておきます。

次に、鍵を作っていきます。

マップの画面に戻り、「新規の空のブループリントクラス」から、アクターを選んでください。

名前はkeyとします。

まず、見た目を作っていきます。僕はキューブとスフィア(球)を組み合わせてそれっぽい形を作りました。

次に、ブループリントを書いていきます。

ここに書くのは、「プレイヤーに当たったらプレイヤーのbhavekeyをtrue(チェックあり)にする」というものです。

まず、前編でも使ったイベントHitから、「cast to FirstPersonCharacter」というノードにつなぎます。

この「cast to ~」というノードは、今回であれば当たった相手をobjectに入れることで、もし相手がFirstPersonCharacterだったらそのFirstPersonCharacterの情報を使えるというノードです。

FirstPersonCharacterでなければ、cast failedの方に流れます。

ここで、イベントHitのOtherと、cast ~のobjectをつなぎます。これで、other、つまり当たった相手がFirstPersonPlayer(プレイヤー)であるかどうかを判別することができます。

ここから、もしプレイヤーであった場合、havekeyをtrueにしたいと思います。

白い線ではなく、下のAs First Person Characterから線を伸ばし、「Set havekey」と打ちます。

このSetノードは、変数の値を設定できるノードです。

ここで、havekeyをtrueにしたいので、チェックを付けておきます。

次に、鍵を取る、という動作を完了させたと見せかけるために、鍵を消すことにします。

アクターを消すには、「DestroyActor」というノードを使います。

これで、鍵のブループリントが完成しました!

次に、鍵を持っていたら開く、という部分をドアのブループリントに追加していこうと思います。

まず、イベントHitから、白い線を出し、「if」と打つと、ブランチと言うものが出てきます。

このブランチというノードは、一般的にはif文と呼ばれる分岐の機能を持っていて、左下にあるConditionというピンがtrueになっているかfalseになっているかでtrueかfalseか、プログラムの流れを変えることができるものです。

次に、ブランチの前に、さきほども使ったcast to FirstPersonPlayerというノードをつなぎます。

今回は、他のものが当たっても開くようにしたいので、objectのところには、「Get Player Character」というノードをつなぎます。

このノードは、indexに入っている番号のプレイヤーの情報を返してくれるという機能があるので、今回はプレイヤー1を表す0をindexにいれます。

ここで、castノードを使ったことにより、プレイヤー1のhavekeyの値が取れるようになったので、As FirstPersonCharacterから、get havekeyと打って、「get have key」というノードを出します。

この「get ~」というノードは、変数の情報を持ってくるものです。

ここで、ブランチのConditionに、havekeyをつなぐことで、鍵を持っているとタイムラインが動き、ドアが開くと言うものができます。

これでドアのブループリントは完成です。

最後に、鍵をマップに配置します。

これで、鍵付きドアを作ることができました!