高機能なゲームエンジンであるUnreal Engineは無料で簡単に始めることができます。
インストールの仕方などは以前の記事をどうぞ。
前回の続きで、First PersonのBPを学びました。
ドアに近づいたとき、特定のボタンを押すとドアの開け閉めができるブループリントを作成しました。今回は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(確認)をクリック。
学習内容
覚えること
「実装されたインターフェイス」という意味。たぶん。
Implement
意味
名詞:道具
動詞(他動詞):…に道具(手段)を与える、(プログラムに機能を)実装する
発音:ímpləmənt
Interface
意味
名詞:接点、接点となるプログラム
(関連)
BPのエッジは、伝えている情報の種類によって色分けしているようです。現時点で理解している内容をまとめました。
白色:順番(左から順に実行)
水色:リファレンス
黄緑:float(浮動小数点数)
青色:色
赤色:boolean(ブール値)
黄色:ベクトル
意味:存続
(関連)
“For Duration”で、「しばらくの間」という意味だと理解。デバッグの線がしばらくしたら消えるから。
“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]にする。
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]に変更する。
もう一つブランチを作り接続する。
[Hit Actor]から[Interact(Message)]を作り、接続する。
[BPI_Interface]を実装しているオブジェクトにヒットすると、[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を持っていることを示している。
[Add Box Simplified Collision]を選ぶと、Collisionが簡単にできる。
↓
もっと複雑な物体なら、[Auto Convex Collision]が便利らしい。
場所:BPI_FirstPersonCharacterのEvent Graph
[Sphere Trace By Channel]の[Draw Debug Type]を[None]にする。
[Interact Event – BPI_Interface]とコメントしておく。
試したこと
新しいブループリントを作って、適当に名前をつける。
↓
Static Meshとして椅子を選択。
[Class Setting]で[Implemented Interfaces]として[BPI_Interaction]を追加。
[Event Interact]を作成。
椅子に向かってEボタンを押すと、椅子が回る。もう一度押すと回転が止まる。
Interfaceを使用するためのBPを使いまわせるのが便利。Interfaceを実装して、Eventを作るだけで良い。
(参考)
コメント