【UE4】Interfaceでドアの開け閉め

高機能なゲームエンジンであるUnreal Engineは無料で簡単に始めることができます。

インストールの仕方などは以前の記事をどうぞ。

前回の続きで、First PersonのBPを学びました。

ドアに近づいたとき、特定のボタンを押すとドアの開け閉めができるブループリントを作成しました。今回はInterfaceを使用しています。

Interfaceでドアの開け閉め

参考動画

ゲームデザイナーのためのブループリントとゲームプレイ>ブループリントインターフェースを使って開く

1.Googleで検索する。そして画像の手順にすすめる。

2.左のウィジェットからコンテンツライブラリを選ぶ。

3.中央にある検索窓から見たい動画を検索。

4.動画を見る。

今回はEpicから配布されている[Blueprints and Gameplay In Development]というプロジェクトを使って学習しています。

1.Unreal engineのサイトのトップバーから、PERSONALを選ぶ。

(まずサイト右上のIDにカーソルを合わせる)

(PERSONALを選ぶ)

2.REDEEM CODE(コードの利用)を選ぶ。

3.次のコードを入力して、REDEEM(コードを利用)をクリック。

QJG79-UKK5K-AYW97-8VE4D

4.COMFIRM(確認)をクリック。

学習内容

覚えること

「部品」という意味。

詳しくはこちらで。

(関連)

参考動画が大抵、”In this module…”と話始めること。

「実装されたインターフェイス」という意味。たぶん。

Implement

意味

名詞:道具

動詞(他動詞):…に道具(手段)を与える、(プログラムに機能を)実装する

発音:ímpləmənt

Interface

意味

名詞:接点、接点となるプログラム

(関連)

BPのエッジは、伝えている情報の種類によって色分けしているようです。現時点で理解している内容をまとめました。

白色:順番(左から順に実行)

水色:リファレンス

黄緑:float(浮動小数点数)

青色:色

赤色:boolean(ブール値)

true or false

黄色:ベクトル

向きと大きさ

意味:存続

(関連)

For Duration

“For Duration”で、「しばらくの間」という意味だと理解。デバッグの線がしばらくしたら消えるから。

Persistent

“Persistent”(しつこい、持続性の)にすると、デバッグの線が消えずにずっと残っていた。

学んだこと

コンテンツブラウザから、[Content]>[Blueprints]>[FirstPersonTemplate]と選び、そのフォルダ内で右クリックをして[Blueprint Interface]を作成する。名前は[BPI_Interaction]とする。

コンテンツブラウザから[Content]>[Blueprints]>[Doors]と選び、フォルダ内の[BP_Door_Parent]を右クリックする。[Create Child Blueprint Class]を選び、子BPとして[BPC_Door_Interface]をつくる。

場所:BPI_Interaction

右上にある[My Blueprint]パネルで、[Interact]という関数を作る。今回はもともと[Tutorial Sample Function]という名前の関数があったので、名前を変更した。

場所:BPC_Door_Interface

上のツールバーから、[Class Settings]を選ぶ。

右のDetailsパネルから[Interfaces]>[Implemented Interfaces]から[Add]をクリック、[BPI_Interaction]を選ぶ。

左の[My Blueprint]パネルにある[Interact]を右クリックして、[Implement event]を選ぶ。

[Event Interact]から[Flip Flop]を作成。その後、Aから[Open Door]を、Bから[Close Door]を作成。

場所:BP_First Person Character

[Input Action Interact]のノードを作成する。

[Interact]とは、以前設定したドアを開くボタン。

[Input Action Interact]から[Sphere Trace By Channel]を作成する。

[First Person Camera]をGetして、[Get World Location]を作成。

[Get World Location]の[Return Value]を、[Sphere Trace By Channel]の[Start]とつなぐ。

[First Person Camera]から[Get Forward Vector]をつくる。

[Get Forward Vector]から[vector * float]を作成。

[Get World Location]から[vector + vector]を作成。

[vector + vector]を下の画像のように接続する。

[vector * float]の[float]を500にする。

(Unreal engine内の値は1=1cmのことらしい。したがって、500は5mを表す。)

[Sphere Trace By Channel]の[Radius]を2,[Draw Debug Type]を[For Duration]にする。

SphereTraceByChannelへの入力

Eボタンを押すと、カメラの前方5m先に半径2㎝(radius=2)の円が、しばらく(For Duration)できる。

Eボタンを押したとき当たり判定(Collision)のあるオブジェクトが前方にあると、トレースがブロックされて(ヒットして)緑色の円ができる。

ヒットすると緑、ヒットしなければ赤色のみ。

[Out Hit]から[Break Hit Result]を作る。

[Blocking Hit]から[Branch]を作り、つなげる。

[Break Hit Result]の三角ボタンをクリックし、出てきた[Hit Actor]から[Does Implement Interface]を作成する。

[Interface]を[BPI_Interaction]に変更する。

もう一つブランチを作り接続する。

B + クリック

[Hit Actor]から[Interact(Message)]を作り、接続する。

[BPI_Interface]を実装しているオブジェクトにヒットすると、[Event Interact]が実行される。このドアの場合は開閉する。

Event Interact

このドアのフレームに向けてEボタンを押すと、ヒットしてドアが開閉する。

ドア自体にEボタンを押してもヒットしない。これはドア自体にCollisionがないからである。

このままだと良くないので、ドアにCollisionをつける。

場所:BP_Door_ParentのViewport

まずDetailsパネルの[Collision]を確認する。[Collision Presets]を見てみると、[Block All Dynamic](全てブロック)となっているが、正常にブロックしていない。

↓詳細

Detailsパネルの[Static Mesh]で、[SM_Door]の画像をダブルクリックすると、新しいウィンドウが開く。

上のメニューバーで[Simple Collision]を選択する。

特に変化しない。これはドア自体にCollisionがないことを示す。

Collisionなし

ドアフレームで同様のことをすると、緑色の枠ができる。これはドアフレームがCollisionを持っていることを示している。

Collisionあり

[Add Box Simplified Collision]を選ぶと、Collisionが簡単にできる。

Collisionあり

もっと複雑な物体なら、[Auto Convex Collision]が便利らしい。

場所:BPI_FirstPersonCharacterのEvent Graph

[Sphere Trace By Channel]の[Draw Debug Type]を[None]にする。

[Interact Event – BPI_Interface]とコメントしておく。

範囲選択してC

試したこと

新しいブループリントを作って、適当に名前をつける。

Static Meshとして椅子を選択。

[Class Setting]で[Implemented Interfaces]として[BPI_Interaction]を追加。

[Event Interact]を作成。

椅子に向かってEボタンを押すと、椅子が回る。もう一度押すと回転が止まる。

Interfaceを使用するためのBPを使いまわせるのが便利。Interfaceを実装して、Eventを作るだけで良い。

(参考)

【Unreal Engine4】近づくと光って回る【BP】

コメント

タイトルとURLをコピーしました