Endless Runner #UE4Study

# Endless Runnner

## 確認バージョン
4.14.3

## 公式ドキュメント
https://docs.unrealengine.com/latest/INT/Videos/PLZlv_N0_O1gbY4FN8pZuEPVC9PzQThNn1/yS-yQfo0lc0/index.html


[Youtubeのチュートリアル動画を自動翻訳字幕を表示させる ](http://qiita.com/gansaibow/items/312d67789e3041f0c959)

## 1 - Introduction & Player Control
[![1 - Introduction & Player Control](http://img.youtube.com/vi/yS-yQfo0lc0/0.jpg)](https://www.youtube.com/watch?v=yS-yQfo0lc0)

### Projectの作成

|項目  |選択内容  |
|---|---|
|BP or C++ |ブループリント |
|テンプレート |ThirdPerson |
|ターゲット |デスクトップ/コンソール  |
|クオリティ |ハイエンド |
|スターターコンテンツ有無 |スターターコンテンツ有り |
|フォルダパス |他のクラスが使用しないフォルダを選択する（ない場合は作成する） |
|プロジェクト名 |EndlessRunner  |

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/e7edb4ef-c388-957f-10c4-310648365735.png)

### キャラクターセットアップ 1
ThirdPersonCharacterをRunCharacterに名前を変更
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/6bef91dd-a466-0365-d28b-4f4f32e4247c.png)

RunCharacterを開いて初期設定を削除する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/872dfffc-098a-ad4b-d340-6abf94b4d619.png)

CameraBoomのSocket Offsetを変更
Z: 100
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/45f52f04-a59e-8aec-67af-040ab2c74f69.png)

前に進む処理をEvent Tickに置き換える
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/d9cc4aa5-fbc2-3aec-2b99-9d1549f0fa32.png)

開始地点を後ろに下げて、プレイして確認する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/c36b3054-8224-88d8-2db9-ff4704c2a660.png)

前に自動的に進む
左右には動くことが出来る
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/c6a591cd-f59f-f0bd-61fb-677363dce4b6.png)


### キャラクターセットアップ 2 A,Dで向きを変える

|変数名  |変数の型  |
|---|---|
|CanTurn |Boolean |
|DesiredRotation |Rotator |


![image](https://qiita-image-store.s3.amazonaws.com/0/111261/e69364b2-3cbc-6060-1922-59ea48c0943b.png)


![image](https://qiita-image-store.s3.amazonaws.com/0/111261/071ce7b6-4122-deb6-8a48-d5c73cd2c349.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/a86956f1-8ced-13de-ee98-2d3b73f8e94a.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/a0fd527d-3183-8f4c-55ff-e4a3dd7448b1.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/6071881a-96c6-9f7c-9f2c-a226960f5949.png)

設定を戻す
Scale Valueを1
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/ac89e03b-3ecc-22dd-2663-b5c24786bb4a.png)

CanTurnをfalse
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/43dec986-93fe-7ee5-e4c7-c383d659ad67.png)

Inter Speedを10に設定
向きを変えるスピードが速くなる
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/9bd2fd69-d860-d2cf-9053-31e4dd378303.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/a35cf0cf-e8d7-f121-ba25-23b7d7e4d200.png)

### 向きを変えられるエリアに入ったら向きを変えられるようにする
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/6e0f07e7-8544-432d-2f2b-a6980da84932.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/18ae59ba-c08a-88fd-2935-faa43aa9ae72.png)

エリアに入ったらCanTurnをTrueに設定する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/98a09225-053c-08b5-b6e7-b6f34021bb52.png)

向きを変更したら、向きを変えられないようにCanTurnにFalseを設定する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/7015955f-014e-1cbb-adef-47e3326a72ac.png)

Trigger BoxのActor Hidden In Gameのチェックを外す
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/8c503811-424e-449d-c04a-67d760e4a932.png)

エリアに入った後にAorDで進行方向の向きを変える。
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/a2f0e773-576f-5cb7-11b8-86f912487da7.png)

## 2 - Spawning the Course

[![2 - Spawning the Course](http://img.youtube.com/vi/3om6yJiYMcg/0.jpg)](https://www.youtube.com/watch?v=3om6yJiYMcg)


### BP_FloorTileを作成する

|名前  |親クラス  |
|---|---|
|BP_FloorTile |Actor |

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/c545366c-5c95-e779-06f3-089fd274b03b.png)

#### コンポーネントの追加

|名前  |追加するコンポーネント  |
|---|---|
|Floor |Cube |


Floorの詳細を変更

Transform

|項目  |X  |Y  |Z  |
|---|---|---|---|
|ロケーション  |500.0  |0.0  |0.0  |
|ローテーション  |0.0  |0.0 |0.0 |
|スケール  |10.0  |10.0  |0.1  |

Materials

|項目名  |値  |
|---|---|
|Element0  |M_Brick_Clay_New |

FloorをDuplicateしてWall1,Wall2を作成

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/3b6a9cfa-5185-cffe-c8f5-8ab6253aa999.png)

Wall1 Transform

|項目  |X  |Y  |Z  |
|---|---|---|---|
|ロケーション  |500.0  |-500.0  |80.0  |
|ローテーション  |0.0  |0.0 |0.0 |
|スケール  |10.0  |0.1  |2.0  |

Wall2 Transform

|項目  |X  |Y  |Z  |
|---|---|---|---|
|ロケーション  |500.0  |500.0  |80.0  |
|ローテーション  |0.0  |0.0 |0.0 |
|スケール  |10.0  |0.1  |2.0  |

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/6def3aac-0735-522e-3105-abfc41d22aac.png)

#### コンポーネントの追加

|名前  |追加するコンポーネント  |
|---|---|
|AttachPoint |Arror |

Transform

|項目  |X  |Y  |Z  |
|---|---|---|---|
|ロケーション  |1000.0  |0.0  |0.0  |
|ローテーション  |0.0  |0.0 |0.0 |
|スケール  |1.0  |1.0  |1.0  |

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/e4b24bd2-764b-ea52-65e4-6e337d4b4a5b.png)


#### Funcation:GetAttachTransformの作成

GetAttachTransformを作成する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/62a430f8-e382-0a66-8d0c-296fc4dc2e31.png)

**GetAttachTransform**

**Output**

|変数名  |変数の型  |
|---|---|
|AttachTransform |Transform |

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/35f70e5e-f18d-287d-f9bc-1ae805645b65.png)

**処理の実装**
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/e724551e-0ecc-82a5-8014-51b3860c647c.png)

### 新規レベルの作成

File -> New Level
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/ee02c0cf-f20f-586e-060f-ff1e12b8cdc9.png)

Defaultを選択
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/7a7f78a6-69e4-1280-b449-9e5fdc5087a3.png)

#### RunGameModeの編集 1
ThirdPersonGameModeをRunGameModeにリネーム
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/12d87f2f-0c4e-ad55-4120-33072fe1eaa7.png)

RunGameModeを開く
Open Full Blueprint Editorをクリック
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/306e775f-ef29-73bd-d227-b9d05c385d26.png)

**AddFloorTileの作成**

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/9e8c9e2b-927a-2e76-ac77-b16d481b7b35.png)


|変数名  |変数の型  |
|---|---|
|NextSpawnPoint |Transform |

**処理の実装**
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/2bd4e389-50af-6b0c-9846-32ee06122770.png)

BeginPlayを実装
開始時にAddFloorTileを呼び出す
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/ce17bc4f-0891-796a-5750-a61d5a159abc.png)

WorldSettingsのGameModeを変更する

**GameMode**

|項目名  |値  |
|---|---|
|GameModeOverride |RunGameMode |

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/588d628b-b94b-c6e2-5b8a-0878fa33f362.png)


初期に配置されているFloorオブジェクトを削除する
Slimulateで実行する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/ebd9a540-0b64-6957-c3e7-5e91a5d37fe2.png)

BP_FloorTileは表示される
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/3dc39271-85c0-4cd1-1d61-7d428d78798b.png)

#### BP_FloorTileを連結するように修正する

##### BP_FloorTile：AddFloorTileの変更

**処理の変更**
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/b6f70ad1-1273-a8be-7d3a-1c01cac06719.png)

##### BeginePlayの処理を変更する
開始時に9つ分AddFloorTileを呼び出す
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/1774c5f2-1c11-f422-923d-9996e2aad5c8.png)

##### プレイして確認する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/13f8fd3e-07ce-b9cc-73fd-c999ffd1657c.png)


#### BP_FloorTileを通り過ぎたら消す

##### BP_FloorTileにEndTriggerを追加する

|名前  |追加するコンポーネント  |
|---|---|
|EndTrigger |Box Collision |


EndTriggerの詳細を編集する

Transform

|項目  |X  |Y  |Z  |
|---|---|---|---|
|Location  |1000.0  |0.0  |190.0  |
|Rotation  |0.0  |0.0 |0.0 |
|Scale  |1.0  |1.0  |1.0  |

Shape:Box Exient

|項目  |X  |Y  |Z  |
|---|---|---|---|
|Location  |32.0  |500.0  |200.0  |

Collision

|項目名  |値  |
|---|---|
|Collision Presets |OverlapOnlyPawn |

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/2f61e268-8b33-6351-eba7-4cb56b05a92a.png)

##### EndTriggerのOn Component Begin Overlapを編集する

On Component Begin Overlapを追加する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/bd2e7daa-2f7c-1004-eceb-2b51c1db93e8.png)

**処理の実装**
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/496510e7-6ce7-27b9-af3d-26e82df9f648.png)

プレイして確認する

プレイ中にカメラを話して確認する方法
[ゲーム中に視点を切り替えてオブジェクトの状況を確認する](http://qiita.com/gansaibow/items/e1b2633c26e535ff3823)
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/1e56c9a4-841c-1f83-6fb1-a1a05dc78e46.png)

EndlessRunnerでLevelを保存する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/3195142b-5be2-af99-b3f7-5b39790fbde1.png)


## 3 - Creating Obstacles
[![3 - Creating Obstacles](http://img.youtube.com/vi/qzFd-PfM5kc/0.jpg)](https://www.youtube.com/watch?v=qzFd-PfM5kc)


### BP_Blockerを作成する

BP_Blockerを作成する

|名前  |親クラス  |
|---|---|
|BP_Blocker |Actor |


ブロック用の岩のStaticMeshを追加する

|名前  |追加するコンポーネント  |
|---|---|
|Rock |StaticMesh |

Rockの詳細を設定する

Static Mesh: Static Mesh
 
|項目名  |値  |
|---|---|
|Static Mesh |M_Rock |


### BP_FloorTileを編集する

#### SpawnPointL,SpawnPointC,SpawnPointRの追加

|名前  |追加するコンポーネント  |
|---|---|
|SpawnPointL |Arrow |
|SpawnPointC |Arrow |
|SpawnPointR |Arrow |


SpawnPointL Transform

|項目  |X  |Y  |Z  |
|---|---|---|---|
|Location  |890.0  |-290.0  |30.0  |
|Rotation  |0.0  |0.0 |0.0 |
|Scale  |1.0  |1.0  |1.0  |

SpawnPointC Transform

|項目  |X  |Y  |Z  |
|---|---|---|---|
|Location  |890.0  |0.0  |30.0  |
|Rotation  |0.0  |0.0 |0.0 |
|Scale  |1.0  |1.0  |1.0  |

SpawnPointR Transform

|項目  |X  |Y  |Z  |
|---|---|---|---|
|Location  |890.0  |290.0  |30.0  |
|Rotation  |0.0  |0.0 |0.0 |
|Scale  |1.0  |1.0  |1.0  |

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/7786d7f8-a085-62d7-5b3c-6f882742d9a6.png)

#### Function:SetSpawnPointsを作成する

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/562bcfbb-5ad2-c5bc-f0fd-e54fbaf1bf22.png)

変数SpawnPointsの追加

|変数名  |変数の型  |
|---|---|
|SpawnPoints |Transform(配列) |

#### Function:SpawnBlockerを作成する

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/abb08627-85ea-71f4-5809-cf9dba66718d.png)

Addd Child Actor ComponentノードのChild Actor Classを[BP_Blocker]に設定する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/406b6389-90e5-f450-3cda-e5ffd7052150.png)

処理の実装
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/ba2f3aa5-805f-e30f-6f87-e7715676e1a9.png)

#### Construction Scriptを編集する

処理の実装
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/c995317d-031d-6f2c-f721-0b43d79ccf50.png)

Simulationボタンを押すとランダムにRockが配置されることが確認することが出来る
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/3ca13126-ac46-c6ef-aa0f-de587c18723f.png)

プレイするとランダムにRockが配置されることを確認することが出来る
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/5e599a6e-d25d-b2e3-3a33-905cf80074bc.png)

キャラクターのスピードが遅いので、Max Walk Speedの数値を大きくする
1. RunCharacterを開く
2. CharacterMovement(Inherited)を選択する
3. Max Walk Speedを1500に変更する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/21bb45c0-b49e-70eb-1890-5d3722e3baf1.png)

### SP_Blokerに衝突するようにSM_RockにCollisionを作成する

BP_FoorTileを開いてSM_Rockを開く
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/8d6e8e63-ab9c-1eae-343c-f1276b61e68d.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/82c42046-c1da-a8c4-d7ab-c889f83c0168.png)

ApplyをクリックするとMeshの形状に近いCollisionが作成される
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/1972692f-e8fa-c559-0b9b-d38dcbe7d655.png)

Save
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/0a5aa917-ffc7-7051-1a32-5b01206ef84d.png)

プレイするとRockにぶつかるとキャラクターが止まるようになる
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/0f2ac720-1823-2440-2383-852b836d19d1.png)

### SP_Blokerに衝突したら爆発するようにする

#### RunCharacterにCustomEvent: Deathを追加する
RunCharacterを開き、CustomEventを追加する
CustomEventの名前をDeathに設定する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/26b0b1f0-eb0b-2d4c-0daa-e6dace76b18f.png)

処理を実装する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/11cf2441-6b6e-1150-5954-48d15403b3a8.png)

#### BP_BlockerのRockにOn Component Hitを追加する

Rockを選択して、On Component Hitを追加する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/b6df6667-a60f-1145-5bca-ab570c825663.png)

処理を実装する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/56e80a82-318e-efbb-6728-ae579561d627.png)

プレイしてBP_Blockerに衝突すると、爆発する
ただし、爆発し続けてしまう
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/8d3feb56-2058-86d5-0e00-c87725a9f243.png)

#### 一度だけ爆発するように修正する

変数を追加する

|変数名  |変数の型  |
|---|---|
|IsDead |Boolean |

Deathイベントが発生したらIsDeadをTrueに設定する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/81ae11d6-2f60-dc5a-497b-b1c8612c9774.png)

前に移動する処理にDeathイベントが発生した際に前に進まないように判定文を追加する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/de6a1c71-f7c5-4258-5507-ac2b5efd43c0.png)

プレイして確認する
1度しか爆発しない
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/f4202ae4-1cac-b54c-88d6-0dc4a7910b8e.png)

#### リスタートを実装する

Deathイベントの末尾にリスタート処理を実装する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/641059f1-b8f9-32e5-f661-2c33abe55e6e.png)

プレイして確認する
BP_Blockerに衝突後、最初から再開する

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/3ee3a5a9-fc7c-6757-dfc8-2b30365e1159.png)

## 4 - Adding Pickup Items

[![4 - Adding Pickup Items](http://img.youtube.com/vi/sNueIWCKoco/0.jpg)](
https://www.youtube.com/watch?v=sNueIWCKoco)

<iframe width="560" height="315" src="https://www.youtube.com/embed/sNueIWCKoco" frameborder="0" allowfullscreen></iframe>

### BP_Itemを作成する

BP_Itemを作成する

|名前  |親クラス  |
|---|---|
|BP_Item |Actor |

#### コンポーネントを追加する

|名前  |追加するコンポーネント  |
|---|---|
|Coin |Static Mesh |
|PointLight |Point Light |
|RotatingMovement|Rotating Movement |

#### Coinの詳細を設定する

Static Mesh: Static Mesh

|項目名  |値  |
|---|---|
|Static Mesh |Shape_Torus |

Transform

|項目  |X  |Y  |Z  |
|---|---|---|---|
|Location  |0.0  |14.0  |0.0  |
|Rotation  |-90.0  |0.0 |0.0 |
|Scale  |1.0  |1.0  |1.0  |

Materials

|項目名  |値  |
|---|---|
|Elements 0|M_Material_Gold |

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/756255f0-5c9c-0e08-fa14-962028770960.png)


#### PointLightの詳細を設定する

Transform

|項目  |X  |Y  |Z  |
|---|---|---|---|
|Location  |0.0  |0.0  |-60.0  |
|Rotation  |0.0  |0.0 |0.0 |
|Scale  |1.0  |1.0  |1.0  |

Light

|項目名  |値  |
|---|---|
|Intensity |2000 |

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/f36e00ab-4996-434a-d0f3-70ca0565fb26.png)

SimulationボタンをクリックするとRingが回転する

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/666453ad-daa6-6599-88cc-f181996a3596.png)


### BP_FloorTileにBP_Itemを発生するエリアを作成する

#### コンポーネントを追加する

|名前  |追加するコンポーネント  |
|---|---|
|CoinArea |Box Collision |

#### CoinAreaの詳細を設定する

Transform

|項目  |X  |Y  |Z  |
|---|---|---|---|
|Location  |500.0  |0.0  |85.0  |
|Rotation  |0.0  |0.0 |0.0 |
|Scale  |1.0  |1.0  |1.0  |

Shape

|項目  |X  |Y  |Z  |
|---|---|---|---|
|Box Extent  |460.0  |460.0  |2.0  |

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/d7dfcd6d-7b6e-37aa-9adf-9cd16420fca0.png)

#### Function:SpawnCoinsを追加する

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/d2f1348b-dd22-3b8b-f592-21e6de3a413e.png)

Add Child Actor ComponentのChild Actor ClassにBP_Itemを設定する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/b8d9a423-d488-ff4c-47b0-2c1595742c8d.png)

処理を実装
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/5615f8bc-f1cd-857e-9087-b369ab00cf46.png)

#### Construction Scriptを編集する

SpawnCoinsを追加する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/b9397f6b-5001-e266-68ea-d2588b675b52.png)

ViewPortでSimulationボタンをクリックするとBP_ItemがCoinAreaのどこかに発生する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/e3089c20-5b37-62f5-fc67-09ef7dd5fb16.png)

#### BP_Itemを複数個発生するようにSpawnCoinを修正する

SpawnCoinにForLoopを追加する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/3833701c-5fc0-af6e-51a8-2786d0cd3ded.png)

ViewPortでSimulationボタンをクリックするとBP_Itemが6つCoinAreaのどこかに発生する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/5c383e58-e09c-1634-bebf-1780f5891b34.png)

#### BP_ItemかBP_Blockerが発生するようにConstruction Scriptを修正する

ランダムでSpawnBlockerかSpownCoinsが呼ばれるように修正する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/548fc8cb-b155-9bf3-06b1-61d27e454db5.png)

SimulationをクリックしてランダムにBP_BlockerかBP_Itemが発生することを確認する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/bf601a08-2402-d060-6565-5f48765f4bc1.png)

プレイして確認する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/4d19268f-9c53-caf9-85f5-d7d844e25125.png)

### 取得したBP_Itemの合計を保持するように修正する

#### RunCharacterを修正する

##### 変数を追加する

|変数名  |変数の型  |
|---|---|
|TotalCoins |Integer |

#### Funcion:AddCoinを追加する

Function AddCoinを追加する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/34331d7f-f69c-4d05-e581-c0aafd477d26.png)

処理を実装する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/3fb14ce1-3bc5-d607-afac-54a0e4a22139.png)

#### BP_Itemを修正する

##### コインを取得した時の音をインポートする
コインの取得音をダウンロードする
https://1drv.ms/u/s!AsyaT0uIFWqQgY5DvES-sWbYrlJXUA

Audioフォルダを作成して、ダウンロードしたcoin_get.wavをインポートする
Sound_Cueを作成する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/0831f77f-4851-377c-e8ca-b06499f5fdb9.png)

##### CoinのCollisionを修正し、On Component Begin Overlapを追加する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/47d9592d-b936-6861-dd2b-1f9f555621c5.png)

処理を実装する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/274a62f7-628a-9b54-0133-d4ebdc85e043.png)

プレイして確認する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/3fd290eb-47f6-4791-053b-33400abe4f74.png)

### 取得したBP_Itemの合計を表示するように修正する

#### WidgetBlueprint: RunHUDを作成する
UMGフォルダを作成する
WidgetBlueprintを作成する
名前はRunHUDに設定する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/8e2e6a1b-18ba-0035-45a6-ccb0195c1cb5.png)

Textのfont sizeは50に設定
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/41d1f012-902b-3a01-ad43-b1948b34ba99.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/cb08d0eb-1a30-9bee-3687-d21d59d9d04d.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/214df6d2-94a2-22f7-85ae-3f5a2b512711.png)

#### RunGameModeのBeginPlayを修正する

BeginPlayでRunHUDを表示するように修正する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/112213a3-2569-da24-4bc9-c4735564bc0c.png)

プレイして確認する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/8b2f69e7-19e4-c673-528f-7cd5c2ed0045.png)

## 5 - Varying the Course

[![5 - Varying the Course](http://img.youtube.com/vi/OVrfHO2DdOs/0.jpg)](https://www.youtube.com/watch?v=OVrfHO2DdOs)


### BP_FloorTileのChild Blueprint Class：BP_FloorTile_RampUpを作成する

BP_FloorTileを右クリック
Create Child Blueprint Classを選択し、Child Classを作成する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/ea268dbf-1a28-1bb8-b544-9d2c1b53e264.png)

#### StaticMesh：Rampを追加する

|名前  |追加するコンポーネント  |
|---|---|
|Ramp |Static Mesh |

#### Rampの詳細を設定する

Static Mesh: Static Mesh

|項目名  |値  |
|---|---|
|Static Mesh |Shape_Wedge_B |

Transform

|項目  |X  |Y  |Z  |
|---|---|---|---|
|Location  |1250.0  |0.0  |0.0  |
|Rotation  |0.0  |0.0 |180.0 |
|Scale  |5.0  |10.0  |3.0  |

Materials

|項目名  |値  |
|---|---|
|Elements 0|M_Tech_Hex_Tile_Pulse |

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/c772b52d-d2ba-3632-7a16-1e135b1d6a0a.png)

#### AttachPointの位置をRampの上部中央に移動する

Transform

|項目  |X  |Y  |Z  |
|---|---|---|---|
|Location  |1500.0  |0.0  |280.0  |
|Rotation  |0.0  |0.0 |0.0 |
|Scale  |1.0  |1.0  |1.0  |

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/9456171b-6f05-3bb4-7f79-8f4878e3d3d4.png)

#### EndTriggerの位置をRampの上部中央に移動する

Transform

|項目  |X  |Y  |Z  |
|---|---|---|---|
|Location  |1500.0  |0.0  |475.0  |
|Rotation  |0.0  |0.0 |0.0 |
|Scale  |1.0  |1.0  |1.0  |

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/fbf3778c-37ee-641a-7fb3-053b44c9f120.png)

### RunGameModeのAddFloorTileをBP_FloorTileかBP_FloorTile_RampUpのいずれかを追加するように変更する

#### 変数：FloorTilesを追加する

|変数名  |変数の型  |
|---|---|
|FloorTiles |Actor(Class)(配列) |

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/4873ae7e-bba1-2b7d-897d-504931c790f9.png)

処理を実装
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/70a29cfb-5aec-99a7-c929-743fb323601a.png)

コンパイル -> 保存 -> Class Default

FloorTiles

|インデックス  |値  |
|---|---|
|0 |BP_FloorTile |
|1 |BP_FloorTile_RampUp |

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/ff297841-c286-ae22-0a2b-55bb838211d7.png)

プレイして確認する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/09049d38-496b-15d1-1694-79e19c448f33.png)

### BP_FloorTile_RampDownを作成する

#### BP_FloorTile_RampUpからDuplicate（複製）してBP_FloorTile_RampDownを作成する
 
BP_FloorTile_RampUpをDuplicateする
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/df393f85-9816-88ec-6acf-fac1b3de13d6.png)

BP_FloorTile_RampDownに名前を設定する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/99c96c16-aeb9-5d6f-08ec-aceabc22dd41.png)

#### Rampを下り坂になるように移動する

Transform

|項目  |X  |Y  |Z  |
|---|---|---|---|
|Location  |1250.0  |0.0  |-300.0  |
|Rotation  |0.0  |0.0 |0.0 |
|Scale  |1.0  |1.0  |1.0  |

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/9496c767-af7d-df3f-1f7a-88accab88307.png)

#### AttachPointを下り坂の終わりに移動する

Transform

|項目  |X  |Y  |Z  |
|---|---|---|---|
|Location  |1500.0  |0.0  |-300.0  |
|Rotation  |0.0  |0.0 |0.0 |
|Scale  |1.0  |1.0  |1.0  |

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/463720dd-c5b4-9c66-6f5a-29ae14656a53.png)

#### EndTriggerを下り坂の終わりに移動する

Transform

|項目  |X  |Y  |Z  |
|---|---|---|---|
|Location  |1500.0  |0.0  |-135.0  |
|Rotation  |0.0  |0.0 |0.0 |
|Scale  |1.0  |1.0  |1.0  |

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/e326b00f-98ca-1ece-afa1-a2991f3fb893.png)

#### RunGameModeのFloorTilesにBP_FloorTile_RampDownを追加する。

FloorTiles

|インデックス  |値  |
|---|---|
|0 |BP_FloorTile |
|1 |BP_FloorTile_RampUp |
|2 |BP_FloorTile_RampDown |

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/7e06ca95-0de4-93e3-7daa-6e08d34e2818.png)


プレイして確認する

コースに直線、上り、下りが作成される
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/c597f09c-6baf-2b77-6db1-3a85682ca113.png)

## 6 - Turning Corners

[![6 - Turning Corners](http://img.youtube.com/vi/E8D3TMvrYiM/0.jpg)](https://www.youtube.com/watch?v=E8D3TMvrYiM)


### BP_FloorTile_RightCornerを作成する

BP_FloorTileからChild Blueprint Classを作成する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/4391e944-025c-9a26-ecf4-1f501371113e.png)

名前をBP_FloorTile_RightCornerに設定する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/346bbb3f-dc62-06d9-6fce-df82ee7af957.png)

#### Parent:Construction Scriptを呼ばないようにする
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/4499b25f-d104-f0e9-70ae-2517b0f35c31.png)

#### Wall2を修正する

Transform

|項目  |X  |Y  |Z  |
|---|---|---|---|
|Location  |1000.0  |0.0  |80.0  |
|Rotation  |0.0  |0.0 |-90.0 |
|Scale  |10.0  |0.1  |2.0  |

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/15705672-f0ef-432b-c554-036c4e7e56ac.png)

#### EndTriggerを修正する

Transform

|項目  |X  |Y  |Z  |
|---|---|---|---|
|Location  |500.0  |500.0  |190.0  |
|Rotation  |0.0  |0.0 |90.0 |
|Scale  |1.0  |1.0  |1.0  |

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/ebd123a6-8370-ad33-4d5a-bcd3725ded9f.png)

#### AttachPointを修正する

Transform

|項目  |X  |Y  |Z  |
|---|---|---|---|
|Location  |500.0  |500.0  |190.0  |
|Rotation  |0.0  |0.0 |90.0 |
|Scale  |1.0  |1.0  |1.0  |

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/5edab73c-667f-9e8c-effb-6f3313fc5350.png)


#### TurnZoneを追加する

|名前  |追加するコンポーネント  |
|---|---|
|TurnZone |Box Collision |

Transform

|項目  |X  |Y  |Z  |
|---|---|---|---|
|Location  |500.0  |0 |110.0  |
|Rotation  |0.0  |0.0 |90.0 |
|Scale  |1.0  |1.0  |1.0  |

Shape

|項目  |X  |Y  |Z  |
|---|---|---|---|
|Box Extent  |480.0  |480 |64.0  |

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/eb0fcc11-699a-7cf0-ce61-3cd0ee6e5109.png)

Collision

|項目名  |値  |
|---|---|
|Collision Presets  |OverlapOnlyPawn  |

On Component Begin Overlapを追加する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/4c93f02f-fad8-044d-1861-f31dcc940bca.png)

処理を実装する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/4ac99ea8-a08c-6eb4-a322-ed42eeafdd39.png)

### BP_FloorTile_LeftCornerを作成する

#### BP_FloorTile_RightCornerからBP_FloorTile_LeftCornerを複製する

BP_FloorTile_LeftCornerをDuplicateする
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/683ab7de-77b9-315e-6383-7a574c5a49dc.png)

名前をBP_FloorTile_LeftCornerに設定する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/97755a6e-dfe0-cfb8-58e1-e689fae4b8df.png)

#### Wall1を修正する

Transform

|項目  |X  |Y  |Z  |
|---|---|---|---|
|Location  |500.0  |500.0  |80.0  |
|Rotation  |0.0  |0.0 |0.0 |
|Scale  |10.0  |0.1  |2.0  |

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/b7c943a4-05bf-27c2-b9f7-ce49d1d75997.png)

#### EndTriggerを修正する

Transform

|項目  |X  |Y  |Z  |
|---|---|---|---|
|Location  |500.0  |-500.0  |190.0  |
|Rotation  |0.0  |0.0 |90.0 |
|Scale  |1.0  |1.0  |1.0  |

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/a07fca96-b5f5-50d1-0b85-6c962f712dde.png)

#### AttachPointを修正する

Transform

|項目  |X  |Y  |Z  |
|---|---|---|---|
|Location  |500.0  |-500.0  |190.0  |
|Rotation  |0.0  |0.0 |90.0 |
|Scale  |1.0  |1.0  |1.0  |

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/b93e6715-2499-98fe-5f07-5054c1335a4e.png)

### RunGameModeを直線系、コーナー系の生成をするように修正する

#### Function:AddFloorCurveを作成する

AddFloorTileをDuplicateする

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/5e5bd871-8c26-034e-5466-743c9982ecbe.png)

名前をFloorCurvesに設定する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/4d7ba19e-a91e-e556-756e-4d2af47d2949.png)

処理を実装する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/de3d77f7-6d1e-8669-c3e4-7d22a32bcfe1.png)

#### 変数：CurrentStraightを追加する

|変数名  |変数の型  |デフォルト値 |
|---|---|---|
|CurrentStraight |Integer |0|
|StraightMax |Integer |7|

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/fef4df27-0666-da73-c04b-64a745dd9462.png)


#### AddFloorTileを修正する

直線を作成するごとにCurrentStraightをインクリメントし、
CurrentStraightがStraightMaxの最大値を越えたら、AddFloorCurveを呼びだすように修正する

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/a4f6948f-89f3-c198-e6cd-8010cd2b0ee4.png)



#### AddFloorCurveを修正する

CurrentStraigtを0に戻す
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/a7e0fd74-6f79-986d-d08a-b4630d80b3dd.png)

#### ClassDefault FloorCurvesの初期値を設定する

ClassDefaultをクリックし、FloorCurvesにコーナー系ブループリントを追加する

FloorCurves

|インデックス  |値  |
|---|---|
|0 |BP_FloorTile_LeftCorner |
|1 |BP_FloorTile_RightCorner |

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/aef5dc39-9b5a-a985-3fd4-06a1cb1b0df8.png)

プレイして確認する

コーナーが作成される
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/2ff92b0b-be04-c11f-b6e1-a72b0ba9b430.png)

コーナーでAかDを押すと向きを変える
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/af335c67-7013-d724-f43f-a995a2b4f6d2.png)

コーナーで行き詰ってしまったら身動きが取れなくなる
7 - Wrap Upで行き詰まりの際にキャラクターが死ぬように修正する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/acfcf8e8-6add-febe-9de9-e3790eda4645.png)

## 7 - Wrap Up

[![7 - Wrap Up](http://img.youtube.com/vi/VJOMdHzp3b8/0.jpg)](https://www.youtube.com/watch?v=VJOMdHzp3b8)

### BP_FloorTileのWall1,Wall2に衝突したら死ぬように修正する

#### BP_FloorTileのWall1にOn Component Hitを追加する

BP_FloorTileを開き
Wall1にOnComponentHitを追加する

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/6da33001-d52f-32ba-3bcb-e5debe3a13d9.png)

処理を実装する
動画ではNearlEqualのBの値が-1になっているが、1を設定する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/a1e5ab39-3396-0665-ae8d-750bc715167e.png)


#### BP_FloorTileのWall2にOn Component Hitを追加する

Wall2にOnComponentHitを追加する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/541c2f4c-f8b9-53bc-c808-bc5f4fe9b096.png)

処理を実装する
Wall1の処理と同じなので、Wall1の処理をコピーしてWall2の処理を実装する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/22c15805-3fb4-ab2f-7e55-5b81032d201a.png)

プレイして確認する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/7c2f7243-3d73-e997-314c-8f72557237f0.png)

コーナーの壁にぶつかった時だけ爆発する
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/296ebb18-c50a-f51a-1ccf-bfc13c7f99cf.png)