Skip to main content
S大学ゲーム制作サークル
第二回
超初心者向けUE4チュートリアル(2)
このスライドについて
• 前回のスライドの続き。(http://ai-
gaminglife.hatenablog.com/entry/2018/04/25/022723)
• 前回はUE4の英語版を使っていましたがこのスライドから日本語版を使用
します。
今回の作業内容
• プレイヤーが弾を発射できるようにする
• 敵キャラを実装する
• 敵キャラのAIを作る
• 敵キャラのスポーン管理システムの実装
弾のBPを作る
• MyBlueprintフォルダ内で右クリック。”ブループリントクラス”を選択。親
クラスにActorを指定する。
• 名前を “BP_Bullet” とする。(後から名前を書き換える時はコンテンツブ
ラウザで対象のモノを選択し、F2キーを押すと書き換えることが出来る)
• コンテンツブラウザでBP_Bulletをダブルクリック。ブループリント編集画
面を開く。
弾のBPを作る
• コンポーネントを追加 を選択し、 “球” と “Sphere Collision” を追加。
• 球を選択し、拡大縮小を(x,y,z) = (0.25.0.25,0.25)に変更。
• Sphere Collisionを選択し、詳細パネルから “Shape” -> “Sphere Radius”を
13.0に変更。
• 続けて ProjectileMovement コンポーネントを追加。これはアクターの移
動に関する機能を持つコンポーネント。
弾のBPを作る
• イベントグラフに移動。画像の様なBPを組む。 “In LifeSpan”は2.0。
• Set Life Spanは寿命を設定する関数。Event BeginPlayと繋げることで弾を
出してから2秒後に弾を消すことが出来る。
弾のBPを作る
• ただの白い弾では味気ないので見た目を変更する。これは “マテリアル”
を変更することで可能となる。
マテリアルとはオブジェクトの質感を細かく設定したデータのこと。これ
をいじることで色を変更できたり、金属感、半透明、輝き、反射などを細
かく制御できる。
• マテリアルを詳しく説明するとそれだけで何十時間掛かるので今回は詳し
く説明しません……
弾のBPを作る
• コンポーネントパネルから球を選択。詳細パネルに “Materials” -> “エレメ
ント 0” という設定項目があることを確認。何もいじっていなければ
“BasicShapeMaterial”が設定されているはず。
• “BasicShapeMaterial”と書かれたボックスを選択。 検索欄に
“M_Metal_Gold” と入力し選択。画像の様になるはず。
弾のBPを作る
• コンポーネントパネルで Projectile Movement を選択。
• 詳細パネル “Projectile” の “Initial Speed” と “Max Speed” を2000に、
“Projectile Gravity Scale” を 0にする。
• これで初速度と最大速度を2000に、重力を無視して弾を飛ばせるように
なった。
• 全ての作業を終えたらコンパイル!(忘れない!)
キー入力をカスタムする
• 編集 -> プロジェクト設定 を選択。
• 開いたプロジェクト設定からエンジン -> インプットを選択し、 Action
Mappinsの右横の+マークをクリック。
• 新たに新規アクションマッピングと入力できる枠が出来るはずなのでそこ
に”Shot”と入力
• 次に “Shot“ に割り当てられるキーを設定する。Shotと入力したテキスト
ボックスの真下のボックスをクリックし、 “マウス” -> “マウスの左ボタ
ン” を選択する。
プレイヤーから弾を飛ばせるようにする
• ThirdPersonCharacter のBP編集画面に移る。
• イベントグラフの任意の位置で右クリ
ック。“インプット” -> “アクションイ
ベント” -> “Shot” を選択する。
(Shotと検索すれば出るはず)
弾の出現位置を設定する
• ビューポートに移動。コンポーネントを追加から “Sphere Colision” を選
択。 Sphere Radius を8.0に、位置を(x,y,z) = (50.0, 0, 0) に設定する。
• この Sphere Colision から弾を発射させる。が、このコリジョンと打ち出
す弾で当たり判定が起きると問題。そこで Sphere Colision の当たり判定
を無視できるようにする。
• 詳細パネルの Collision -> コリジョンプリセットを “No Collision” に設定。
これで当たり判定はなくなった。
プレイヤーから弾を飛ばせるようにする
• イベントグラフに戻り画像のようなBPを組む。 “Sphere” と書いてある
ノードはコンポーネントパネルから “Sphere (Collision)” をイベントグラフ
上にドラッグアンドドロップで置くことが出来る。
上手くいったか実行して確認
• これでマウス左クリックで金色のBP_Bulletを打ち出せるようになったはず。
レベルエディタに戻ってプレイしてみる
敵キャラを作る準備
• コンテンツブラウザ MyBlueprints上で右クリック。新規フォルダを作成す
る。フォルダの名前は “Enemy01” にする。
• Enemy01フォルダを開く。右クリックしてブループリントクラスを追加。
今回は親クラスに Character を指定。名前は “BP_Enemy01” とする。
• BP_Enemy01をダブルクリック。編集画面に移る。
敵キャラを実装する
• コンポーネントパネル -> “Mesh” を選択し、詳細パネルから “Skeletal
Mesh” に “SK_Mannequin” を設定。
• Mesh の位置を調整する。位置のZ座標を -90 に、Z回転を-90にする。
• 敵とわかりやすくするために見た目を変更する。Materialの エレメント 0,
エレメント 1 を適当に設定する。
• このままではアニメーションが付いていないので、コンポーネントMesh
を選択した状態で “Animation” -> “Anim Class” を “ThirdPerson_AnimBPに
設定。
敵キャラを作る準備
• Enemy01フォルダ下に新たにBPを作成する。右クリック -> ブループリン
トクラスを選択。親クラス選択画面で ”全てのクラス” を開き、
“AIController” を検索し選択。名前を “BP_Enemy01Controller” とする。
• 次ページでこのコントローラをBP_Enemy01に設定する
敵キャラを作る準備
• BP_Enemy01の編集画面に戻る。クラスのデフォルトを選択した状態で、
詳細パネル -> “Pawn” -> “AI Controller Class” を “BP_Enemy01Controller”
に変更。
敵キャラを作る準備
• Enemy01フォルダ下で右クリック -> AI -> ビヘイビアツリーを選択。名
前をBT_Enemy01にする。それをダブルクリックすると以下の様な画面が
出てくる。
ビヘイビアツリーとは
• ビヘイビアツリーとはNPC等のAIを作る一つの手段。日本語に訳すと「振
る舞い木」。振る舞いを基本としてAIの行動を木構造で記述する。簡単な
ビヘイビアツリーの例を次のページに示す。
• ビヘイビアツリーはゲーム開発におけるAI開発で一般的な手法として知ら
れている。
ルート
もし敵が近くに
いるなら
シーケンス
残弾が無ければ リロード
HPが少なければ 身を隠す
攻撃
シーケンス
周りを見渡す
移動
タスク
シーケンス
セレクター
AIControllerでビヘイビアツリー起動
• BP_Enemy01Controllerの編集画面で
画像のようなBPを組む。
• Event BeginPlayにRun BehaviorTreeを
繋ぐ。BTAsset に先程作った
“BT_Enemy01” を選択する。
• これでビヘイビアツリーが使える
ようになった。
ブラックボードを作成する
• ビヘイビアツリー編集画面に戻る。ツールバーに新規ブラックボードとい
うボタンがあるので選択。自動でブラックボードが作成される。
名前を “BB_Enemy01” に変更する。
• ブラックボードとはAIの記憶領域のこと。ここに様々な情報を書き込んで
利用していく。
ブラックボードを編集する
• ブラックボード編集画面に移動。
• 新規キー を選択。型を “Vector” とし、そのキーの名前を ”TargetPos” とす
る。
• TargetPosはプレイヤーの位置を保存する
キー。
ビヘイビアツリーとブラックボードを関連付ける
• ビヘイビアツリーに作ったブラックボードを関連付ける必要がある。
• ビヘイビアツリー編集画面の詳細、
”Blackboard Asset” に先程作成した
“BB_Enemy01” を選択する。
新規タスクを作成する
• ビヘイビアツリーのツールバーで新規タスクを選択。自動でタスクが作ら
れる。
• コンテンツブラウザで新たに作られたタスクの名前を
“BTTask_EnemyFindPlayer” とする。これはその時点でのプレイヤーの位置
を確認し保存するタスク。
タスクを編集する
• タスクに変数 “TargetLocation” を追加。変数の型は、 “BlackBoard Key
Selector”。
• 詳細パネルのインスタンス編集可能に
チェックを入れる。
タスクを編集する
• 以下の画像の様なBPを組む。 Finish Execute の Success にチェックを入れ
ないとうまくいかないので注意。
• このタスクでブラックボードにプレイヤーの位置を書き込むことが出来る。
ビヘイビアツリーを編集する
• ビヘイビアツリー編集画面に戻る。ルートの下部の黒いところから引っ
張って Sequence と検索し選択。
• Sequence はその下に繋がっている
ノードを左から順番に実行する
中間ノード。
ビヘイビアツリーを選択する
• Sequence ノードの下に左から順番に実行するタスクを作成する。
• Sequence の下の黒いところから引っ張って画像のようにタスクを配置す
る。左から順番に実行されるので位置を間違えてはいけない。
• Wait タスクを選択し詳細パネル、
Wait Time を2.0に変更。
• “BTTask…” と “Move To”タスクを選
択し詳細パネルで “TargetPos” が選
択されていることを確認する。
ナビゲーションメッシュを設定する
• レベルエディタに戻り、モードパネルの “クラスの検索” に “Nav” と入力。”Nav
Mesh Bounds Volume”と表示されるのでそれをステージの真ん中辺りに配置。
• Pキーを押すと床が緑色に変化する。
緑色になっているところはAIが
「そこは通ることが出来る」と判
断するようになる。
• ナビメッシュの拡縮を変更(Rキー)
してステージ全体を覆って画像の
ようになればよい。
Pキーをもう一度押すと緑色は消
える。
敵にタックル攻撃機能を追加する
• 今のままでは敵はプレイヤーの元へ来るだけで何もしない。というわけで
タックル攻撃ができるようにしてみる。
• BP_Enemy01 編集画面に移動。コンポーネントを追加から”Sphere
Collision” を追加。
• Sphere を選択した状態で詳細パネルで位置を(40.0, 0, 40.0)に、Sphere
Radisを16.0に設定。
オーバーラップイベントを追加
• 追加した Sphere Collision コンポーネントを右クリックし “Add Event” ->
“On Component Begin Overlap” をクリックする。するとイベントグラフ
に新たにイベントが作られる。このイベントはSphereにOverlap(接触)が起
きた時に呼ばれるイベント。
タックル攻撃機能を実装する
• 以下の画像の様なBPを組む。 Apply Damage の Base Damage は10.0に設
定。
敵を倒せるようにする
• 続けて BP_Enemy01 のイベントグラフ上で次ページの通りにBPを組
む。”Set Life Span” の “in Lifespan”は0.2 。 “Spawn Emitter at Location” の
“ Emitter Template” には “P_Explosion” を設定。
• Set Life Span関数は呼び出されてから “In Lifespan” 秒後にアクターを消滅
させるという、寿命を設定する関数。
• Spawn Emitter at Location は 指定の位置に Emitter(エフェクト)を呼び出す
効果がある。今回は最初から用意されている爆発エフェクトを使用する。
敵をレベル上に配置
• レベルエディタに戻り、BP_Enemy01 をステージ上の適当な位置に配置。
プレイしてみると、確かに敵はプレイヤーのいる位置に向かってきて、
2秒待ってまたプレイヤーを追いかける様な挙動を示す。
• 敵キャラにぶつかってみて本当にダメージが入るか、左クリックで弾を発
射し敵を倒すことが出来るかもためしてみる。(上手く行かなかったらス
ライド見返してみて下さい)
敵キャラを次々スポーンさせてみる
• 最初に配置した分しか敵が出てこないのは面白くない。どうせならプレイ
中にランダムで敵が出続けるようにしたい。
• というわけで最後に敵のスポーン管理BPを作っていきます。少々難易度が
上がるので、一度スライドで指示されるがままに作ってみて、自分で勉強
した後にまた読み返すことをおすすめします。
スポーンポイントを用意する
• 先程配置した 敵を全て削除する。(選択してデリートキーで消える)
• モードパネルのクラスの検索で “Target Point” と検索。出てきたターゲッ
トポイントをレベル上にD&Dし、詳細パネルで以下の位置に配置する。
• 1: (-1500, 650, 530)
• 2: (-1300, -650, 130)
• 3: (-1500, -1200, 530)
スポーン管理クラスの作成
• MyBlueprints フォルダで右クリック。ブループリントクラスを選択し親ク
ラスはActorに。名前は “BP_SpawnManeger” とする。
スポーン管理クラスの作成
• ダブルクリックしBP編集画面に移動。変数を追加する。変数の名前は
“TPs” で、変数の型は “Target Point” とする。
• TPs を選択した状態で詳細パネルを見ると
”変数の型” と書かれた所の右横にターゲ
ットマークが描かれたアイコンがある。
それをクリックし、続けて正方形が9つ並
んだ形のアイコンを選択する。
• これで変数を配列化できた。
変数の設定
• 続けて詳細パネルで “インスタンス編集可能” にチェックを入れる。この
意味は後々……
スポーン管理クラスの作成
• イベント BeginPlay の下辺りに画像の様なBPを組む。
• これで ”TPs” に入っているいくつかのターゲットポイントをランダムで選
び、その選ばれたターゲットポイントの位置を取得することが出来る。
スポーン管理クラスの作成
• 続いて以下のようにBPを組む。”Delay” に 5.0を、”Spawn AIFrom Class” の
“Pawn Class” に “BP_Enemy01” を、 “Behavior Tree” に “BT_Enemy01” を選
択することを忘れない。
処理を無限ループさせる
• Delayの右側の実行ピンをひっぱり
Reroute ノードを追加する。
• 追加したRerouteノードとSpawn
AIFrom Class ノードを画像のよう
に繋げる。これで処理を無限ルー
プさせられる。
スポーン管理クラスの作成
• レベルエディタに戻る。 BP_SpawnManager をステージの真ん中あたり、
わかりやすい所に配置する。
• 選択した状態で詳細パネルを見ると
“デフォルト” に “TPs” の値を設定す
る場所がある。変数の設定で “イン
スタンス編集可能” にチェックを入
れるとレベル上で変数の中身を設定
できるようになる。
ターゲットポイントを設定する
• TPsの右側の +マーク を押すと 変数を設定する枠が一つ出てくる。
• 今回はステージ上にターゲットポイントを3つ置いたので +ボタンを三回
押し画像のように変数の値を設定する。
上手くいったか確かめる
• プレイし確かめてみる。
• 5秒おきに敵が3箇所からランダムで出現するはず!
更に先へ
• 敵キャラを出現させる時にエフェクトを追加する
• プレイヤーが何体か敵を倒したら敵の出現頻度や進む速度が上がる
• 敵を倒すと稀に回復アイテムが出る
• 上下に動く床
• スイッチを踏むと動く扉 etc……
• この程度ならUE4に慣れればすぐに作ることができます。前回スライドで
紹介した教材をこなし、その上で余裕があれば課題としてやってみて下さ
い。