【UE4】第13回UE4ぷちコン作品、応募後に修正した箇所リスト

[1]:http://historia.co.jp/ue4petitcon13
[2]:https://youtu.be/E031FMxMJ8Q
[3]:https://youtu.be/FKWi1ci3zWc
[4]:https://qiita.com/Rinderon/items/32c22b9ea3c6dcc10d77
[5]:https://qiita.com/Rinderon/items/450dc656f537458ff948
[6]:https://qiita.com/Rinderon/items/6d5686144f4077868e8a
[7]:https://docs.unrealengine.com/en-US/BlueprintAPI/AI/Navigation/NavigationRaycast/index.html


[株式会社ヒストリアさん主催の第13回UE4ぷちコン][1]応募作品をちょっと１か月ばかし修正してました。
その修正点一覧。

- **BEFORE**：[応募した作品の動画 - Youtube][2]
- **AFTER**：[修正した作品の動画 - Youtube][3]

並べて見比べないと分からない程度ですが。

# 恐竜たちの修正点

- [待機(Idle)アニメーションに、それなりにバリエーションを出す][4]（待機中の恐竜たちのアニメーションをランダム化）
- 柵のコリジョンに擦りながら、厩舎に届けると、厩舎に帰らなくなるバグの修正。

### 恐竜同士のコリジョンをとるようにした

**BEFORE**
![20200501_1540.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/358170/8a6a14d3-fa5d-0575-4377-ababad86f3df.gif)

- 厩舎に帰る青い恐竜たちがどんどん肉融合してゆく。
- 誰にも邪魔されずに目的地に到達できるので、サクサク進んでいる絵面になるメリットもあるにはある。

**AFTER**
![20200501_1550.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/358170/28a029af-9fd6-bc68-f143-023966cead7c.gif)

- Block コリジョンをとると、ガチガチ反発しあって騒がしい絵面になることが予想できたので、Overlap で処理している。
- Overlap にすると：
    - 肉融合するときはするが、気にしない（…というスタンス）
    - お互いのCapsuleコリジョンの潜り量に応じた反発力を与える。（軽い接触の時は軽い力で反発する）
- 赤い恐竜が、青い恐竜たちに押しのけられたあと、元の位置に戻るような、生き物っぽさを感じなくもない動きをしてくれる。

### コリジョンにハマって、着いてこれなくなる問題を解決

**BEFORE**
![20200501_1605.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/358170/da277436-d2b2-e90b-1790-252488d79e01.gif)

- コリジョンを回避して隊列に戻る処理は作っていなかった。
- プレイヤーが迎えに行ってあげる必要があった。

**AFTER**
![20200501_1620.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/358170/25a0d53d-818b-9886-2e43-5a8bb9b7401e.gif)

- かなり面倒くさかったのだが、Nav Mesh (pathfinding) を使用して回避。
- プレイヤーキャラと自分との間にコリジョンがあって([Navigation Raycast][7])、プレイヤーキャラが遠くに行ったら pathfinding を行うようにした。
- 上のGIF動画では、プレイヤーが追いつくのを待っているが、放置して走ってしまっても、いつの間にか追いつくようにはなっている。
- ちなみに、どうしようもなくなった時の緊急ワープは実装していない。

### 隊列で空きができたら詰めるようにした

**BEFORE** （静止画）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/358170/9149baa3-2701-5720-fa48-969bfe4fd887.png)

- 隊列の２列目が空いている。ここを詰めるような処理を入れていなかった。

**AFTER**
![20200501_1640.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/358170/ad62e33d-0816-b80f-d357-6e3da0ecef9e.gif)

- 分かりづらいかもしれないが、緑の恐竜が厩舎に帰るのと同時に、赤い恐竜が前に詰めている。
- 反転して走り出した後、恐竜たちの間に空きスペースがなくなっている。
- 意外とサクッとできた。恐竜たちが参照する位置を入れ替えるだけなので。

### 走行時の砂煙を追加

パーティクルのマテリアル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/358170/4f8f40cf-bb89-2de2-807c-02861516fffa.png)

- 砂煙のパーティクルの下部を暗くする。
    - なんとなく立体感が出る小技。
    - UV座標のV座標をそのまま縦方向のグラデーションとして使用。
    - 上を明るく、下を暗くしたいので、1-x で反転。
    - Power はコントラストを強調するためのもの。
- パーティクルの形を円形にするために、Sphere Mask を使用。
- 同じノイズテクスチャを２枚、違う方向にスクロール(Panner)することで、なんとなく煙が流れているように見えなくもない。

![20200501_1705.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/358170/ae81a677-aa09-e2f2-1bce-ff1b52cacae4.gif)

# ドラゴンの修正点

- [PostProcessで雲行きを怪しくする][5]（ドラゴン出現時の演出を Post Process で行うように変更）
- 飛行時のドラゴンがあまり画面に映らないので、飛行パスとカメラを調整。
- ドラゴンに狙われている恐竜たちを Spot Light で照らしてみようとした。（ええ感じにならなかったので中止）
- 恐竜を食い損ねたドラゴンが、地面をずるずる滑っていく問題の修正。

# Widget の修正点

- Widgetは急場しのぎで作ったので、プログラムに一貫性がなかった。これをキレイにリファクタリング。
- Widget用のテクスチャを一枚にまとめた。
- 恐竜を拾ったとき、厩舎に帰したとき、ドラゴンに食われた時など、数が増減したときには、必ず Widget をだしてお知らせするようにした。

# その他の修正点

- 厩舎の扉が、全員入り終わるより先に閉まってしまう問題の修正。
- 背景の木が実は１種類しか生えてなかったので、バリエーションを増やした。
- 何度ライトビルドしても、Mapロードの度に「LIGHTING NEEDS TO BE REBUILT」が出てしまう問題の修正。
- Cascade Shadow の調整。

# uprojectの整理

- [このアセットが、あのフォルダ内のアセットを参照しているかを調べる][6]
    - 使っていないアセットを検出する Editor Utility。
    - 不要なアセットをサクっと処分できた。