夏休み特別UE4授業Day2 Memo


夏休み特別UE4授業Day2　「ゲーム構築基礎」ロブグレイ
https://www.youtube.com/watch?v=1UpSyGfd8lw

上記についてとても勉強になるし実際にゲームがひと通り作れるので楽しい動画なのですが
ちょっと見なおそうとすると長すぎで、後からここ確認したいということが難しかったので纏めてみました。
Day1は纏めていません。動画視聴が前提なので余計な説明は省いています。


#内容について

ThirdPerson視点のゲームを作ります。
敵の攻撃を避けてゴールを目指すという内容のゲームになります。
BruePrintの内容を纏めてみました。


# 初期設定

新規プロジェクト設定からThirpersonを選択

![setup.png](https://qiita-image-store.s3.amazonaws.com/0/3844/dd8c0bc4-6b44-6f35-b59a-f8e3d2ab91fc.png "setup.png")




## Healthの表示

まずは画面に体力としてプログレスバーを表示します。
その前に体力を記録する変数Healthを追加します。
変数の追加対象はPalyerに当たるThirdPersonCharacterです

変数を追加
Helath：Float
![health.png](https://qiita-image-store.s3.amazonaws.com/0/3844/fe5ccd6a-1d00-ce63-f6e7-7468316e48af.png "health.png")




ダメージ処理としてAnyDamageイベントを受けたらHealthから減算して0以下なら「Death!!!」表示を行う

![anyDamageEvent.png](https://qiita-image-store.s3.amazonaws.com/0/3844/d5135882-7b39-9a8d-86f7-36ce96167148.png "anyDamageEvent.png")


UMG ディレクトリの作成　blueprint作成 
ウィジェットblueprintからplayerUI作成

![playerUI.png](https://qiita-image-store.s3.amazonaws.com/0/3844/9016fa63-93d4-3031-8f78-78c01e85f840.png "playerUI.png")

progressbarの配置　
バインディングの作成

![playerUI2.png](https://qiita-image-store.s3.amazonaws.com/0/3844/f334821d-41c7-e938-4388-8a3152e5d3b9.png "playerUI2.png")

バインディング先の作成の前に
プレイヤーの情報を読み込むために変数化を行う処理として
Construct側の設定

プレイヤーのインスタンスを変数に保存

![PlayerUIConstruct.png](https://qiita-image-store.s3.amazonaws.com/0/3844/ee60f6b2-c52a-7c64-3c11-2e5850eab48f.png "PlayerUIConstruct.png")




バインディングの処理に先ほどの変数を代入。デフォルト値と割ることで0~1の値の範囲に調整
動画にはないですがデフォルト値を扱うために``get class default``を使いました。

![PlayerUI3.png](https://qiita-image-store.s3.amazonaws.com/0/3844/f8fc9b82-0501-5395-5bf2-5be1a51f554f.png "PlayerUI3.png")




UIの表示
ThirdPersonGameModeをクリック
->blueprintを開くにする
beginPlay-> create
ウィジェットを作成
-> PlayerUIを選択
-> add to viewportで表示する

![ThirdPersonGameMode.png](https://qiita-image-store.s3.amazonaws.com/0/3844/2feb6373-c06d-dee1-ba2d-73ad2b9fa534.png "ThirdPersonGameMode.png")



##敵の作成
Blueprints/Tower Actorを作る

スケルタルメッシュ２つで構成base,head


変数を追加　高さ(Float)

コンストラクションスクリプトの内容は以下のとおり
高さの変更と比率の変更でそれぞれの使う関数が違う点に注意

![TowerConstraction.png](https://qiita-image-store.s3.amazonaws.com/0/3844/ae0f6dd8-2997-bb29-cf2e-0a02f8df89db.png "TowerConstraction.png")




### 敵の頭の動き
頭の動き決定するプレイヤーの位置と頭の位置から向きを算出する関数がある
![TowerHeadRotation.png](https://qiita-image-store.s3.amazonaws.com/0/3844/04e64291-181c-b61d-b413-3d400595f16b.png "TowerHeadRotation.png")


#弾(tower用)の作成

ActorクラスからTowerBulletを作成
コンポーネントの構成は
Sphereコリジョン
Sphere -> no colisionに設定する
マテリアルはM_tech_Hex_puluseを設定

便利なコンポーネントを使用する
projectile movementを使うとたまのように飛んで行く
詳細で動きを設定
 init speed =1500
 shoud bounce をチェックする
![TowerBullet_ProjectileMovement_setting.png](https://qiita-image-store.s3.amazonaws.com/0/3844/1c3fd277-d5c7-5890-99b2-0f3f63e9db75.png "TowerBullet_ProjectileMovement_setting.png")

  
Sphereコリジョンがrootになるようにドラッグ
SphereコリジョンのコリジョンプリセットはBlockAllに

##　弾を発射するように調整する

Towerブループリントに戻る
コンポーネントにArrow(Utility)を追加しHeadの子に設定(ドラックで親子関係を設定)
Arrowの位置を調整する(図のように)
Arrow -> ShootStartにリネーム
![TowerHeadArrow.png](https://qiita-image-store.s3.amazonaws.com/0/3844/b3f6f612-80dc-c9e7-2928-3976f0585046.png "TowerHeadArrow.png")


カスタムイベントの追加(Shoot）
玉を打つイベントを独自に定義した。

spawn actorを実行 -> TowerBulletを選択
(似たような名前の項目があって迷いましたので注意)
![TowerShoot.png](https://qiita-image-store.s3.amazonaws.com/0/3844/dc0f1666-d207-3b0c-7d45-ffb2a93bfc1d.png "TowerShoot.png")

### カスタムイベントShootの呼び出し

setTimerで呼び出し処理のついか
ShootTime変数の追加編集可能にしてVector2dにする
2dにしてronadom rangeの最小値最大値として割当てる


![shootTrigerSetting.png](https://qiita-image-store.s3.amazonaws.com/0/3844/46564f65-104b-1e71-5c75-0b105d676056.png "shootTrigerSetting.png")

# Tower弾がプレイヤーにあたった場合の処理

Sphereコリジョンコンポーネントを選び詳細画面にてイベントのOnComponentHitを選択
OnComponentHitイベントが作成されるので処理を記述する
![TowerBulletHitPlayer.png](https://qiita-image-store.s3.amazonaws.com/0/3844/e8df1aba-3c17-636b-0c23-1971e1abf7bd.png "TowerBulletHitPlayer.png")


#移動する敵の作成

BluePrint Characerの作成(bot)
移動するのでActorはダメ
最初から移動用のコンポーネントが用意されている。(CharacterMovement)
スタティックメッシュを足す

アタック半径用のコリジョンを追加しておく
コンストラクションでAttack半径を設定できる用にする
![BotSetAttackRadius.png](https://qiita-image-store.s3.amazonaws.com/0/3844/905bb44c-b9bf-5ca0-bb8e-71fee2be43da.png "BotSetAttackRadius.png")


## 追いかける動作の設定

Chase Eventを作成する
処理は以下のとおり。呼び出しも追加する

![BotChase.png](https://qiita-image-store.s3.amazonaws.com/0/3844/22d6263f-40c2-c31e-4e35-a6a4ecbebd85.png "BotChase.png")

AIを動かすためにはナビゲーションマップが必要
Navi Mesh Bound volumeを全体に適用
Viewからpキーで適用範囲は確認できます

![navigationMap.png](https://qiita-image-store.s3.amazonaws.com/0/3844/0fe5e55d-a0da-9acd-cd60-2de52033c82a.png "navigationMap.png")

##追いついたら止まってしまう問題
もう一度chaseを呼び出す。
今回は爆発して消滅予定なので入れない。

## プレイヤーにぶつかったら爆発するように

 On component hitイベントに処理を追加する
 
  ![Bot2PlayerAttack.png](https://qiita-image-store.s3.amazonaws.com/0/3844/e881847a-d061-dbcc-4114-b8bb34b3baa4.png "Bot2PlayerAttack.png")

## 怒らせる表現

 Matirialの作成(M_Bot)

3を押しながら左クリックでRGB追加

Matから変化するためのパラメーターを作っておく(Angry)
![M_Bot_Material.png](https://qiita-image-store.s3.amazonaws.com/0/3844/523c64d8-843a-6942-8b4a-6b079f23dfc4.png "M_Bot_Material.png")


Botへマテリアルの適用
![MatAssignBot.png](https://qiita-image-store.s3.amazonaws.com/0/3844/18b92b15-f415-5e81-e422-7be202a2e6d3.png "MatAssignBot.png")


### BPから適用

コンストラクションに追加
![BotConstruct2.png](https://qiita-image-store.s3.amazonaws.com/0/3844/ce79a0ac-09d0-79f6-b121-5000d3d7fe96.png "BotConstruct2.png")

追いかける処理に追加

![BotChase2.png](https://qiita-image-store.s3.amazonaws.com/0/3844/d83ea31e-9bba-36f1-b1a4-5f73386842d0.png "BotChase2.png")



#GameOverUIの作成

UMG/GameOverUIの作成
GameOver表示
Restartボタンの表示

Button -> onClick Eventの作成
リスタートするように設定
![GameOverUIRestart.png](https://qiita-image-store.s3.amazonaws.com/0/3844/e303b02f-5fea-848c-65f6-90ce06fdd597.png "GameOverUIRestart.png")


#GameOver処理
GameModeブループリント

GameOver カスタムイベントの作成引数にデッドを追加

## Deathイベントの作成
Deathカスタムイベントの作成
![ThirdPersonGameModeGameOver.png](https://qiita-image-store.s3.amazonaws.com/0/3844/0201b804-e69a-e7f1-32e8-f2591ec6b155.png "ThirdPersonGameModeGameOver.png")

GameOverの呼び出し
![ThirdPersonCharacterDeath.png](https://qiita-image-store.s3.amazonaws.com/0/3844/292272f7-2dab-1405-f9f2-ddca743dfa44.png "ThirdPersonCharacterDeath.png")


Heath処理の最後にDeathイベント呼び出し
![ThirdPersonCharacter_Heath2.png](https://qiita-image-store.s3.amazonaws.com/0/3844/d55e9161-dfec-cf70-2099-053d03a254fd.png "ThirdPersonCharacter_Heath2.png")


##GameOverUI表示時にUIのマウス操作ができるように調整
![GameOverUIMouseControll.png](https://qiita-image-store.s3.amazonaws.com/0/3844/1498b03e-e2f2-0fe6-d470-cb130bf3ac3c.png "GameOverUIMouseControll.png")

#Goalの設定

Actorの作成　Goal

Boxコリジョン
テキストレンダー

ここで力尽きました。後で追記します。