[UE4]FirstPersonShooterゲームを作るときのtips集

#よし、FPS作るぞ！
・この記事では<font color="red">**Unreal Engine4**</font>を使ってFPS(FirstPersonShooter)を作るときに参考になるかもしれないtips集をお届けしたいと思います。

この記事はUnreal Engine 4 Advent Calender 2019その2の20日目の記事です。
https://qiita.com/advent-calendar/2019/ue4_deux


##NearClipPlane
・FPSを作ったことがある方、または作ろうとした方が一度は目にするこの現象
![NCP_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150286/8764ceea-5d69-083c-1a93-9d77e454ecda.png)
カメラから近い場所をクリップしてしまう現象です。実はこれ<font color="red">**Project Settings**</font>から緩和することが可能です。

![NCP_Settings.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150286/b9e2f6f8-5357-967f-1d8c-a9b10533b8a2.png)

試しに<font color="red">**Near Clip Plane**</font>を**5**にしてみましょう。(初期値は**10**)

![NCP_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150286/5057bf55-d07a-499d-5cc3-212226b72f16.png)
クリッピングされなくなりました！素晴らしい！





##WeaponCollision vs Wall

![MeshIntoWall.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150286/db5914e2-19cb-dc2e-868f-bd7976ed7748.png)
FPSゲーでよく見るこの現象、なるだけで僕はがっかりしてしまいます。いくつかの直し方があるので直してみましょう。



**CapsuleCollisionのRadiusを大きくする**
![CapsuleCollision.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150286/44aacc48-6227-265f-85af-e9435fe0989f.png)
デフォルトが**34**ですが、それを**80**くらいにしてみました。

![CapsuleCollision_80.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150286/3940e28f-fea6-d81f-ff0a-8a1a5ea288c8.png)
埋まらなくなりました！ですが、この方法は継承されている<font color="red">**Capsule Collision**</font>の大きさを変えているので場合によっては破綻する恐れがあります。(<font color="red">**Capsule Collisioin**</font>で敵からの当たり判定などをとっている時などはまた別の<font color="red">**Capsule Collision**</font>を用意し当たり判定を取った方がいいです)


**腕メッシュを前後に移動**

![Component.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150286/fa9db263-5083-7fd1-014e-c743a32db638.png)

これはCameraの下に腕のメッシュがある場合の解法になります。

![Tick01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150286/258d563e-0624-fcd9-401c-b28dd28726e9.png)
銃メッシュの<font color="red">**Barrel Socket**</font>(銃の先端)から画面の真ん中まで<font color="red">**Line Trace**</font>を飛ばし、ヒットしたら<font color="red">**BarrelSocket-ImpactPoint**</font>したのをLength(長さ)にします。そのLengthを元に<font color="red">**Map Range Clamped**</font>をし腕メッシュの位置を前後に移動させ埋まらなくさせています。こんな感じになります。

<blockquote class="twitter-tweet"><a href="https://twitter.com/UnrealYoshida/status/1199438376820101120?s=20"/></blockquote>

IKやらなんやらでごちゃごちゃやる方法もありますが、それだけで一本記事が書けちゃうくらい長いのでそれは後ほど


##ADS
ADS(AimDownSight)です。tipsというよりかは実装例になります
![Component.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150286/a84a9eaa-6bd4-2c6b-1ae1-6cfa1c790c07.png)
武器のクラスにCameraを追加します。関数を作成します。
![ADSFunc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150286/bf37f0ee-4aec-9e45-cc6a-e027954c771e.png)
基本的には<font color="red">**Set View Target With Blend**</font>関数でどうにでもなります。<font color="red">**New View Target**</font>のActorが新しいCameraになります。CameraをComponentに含むクラスであれば問題なくCameraの遷移が行われます。この関数をプレイヤーのクラスで呼び出すことでADSが可能になります。

##銃の発射処理
・セミオート
![Semiauto.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150286/e466cfca-f292-fe7a-1ff0-a19bd4abe867.png)
単純に銃クラスのFire関数を実行するだけ

・フルオート
![Fullauto.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150286/5cbb4aa5-e371-3dbf-0291-a1d0688eca34.png)
銃クラスのFireを<font color="red">**Set Timer by Function Name**</font>で実行するだけ

・3点バースト
![3-Bursh.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150286/d73eb344-8d50-cbd0-cb4d-648a7dd2888b.png)
Fire関数を実行し、<font color="red">**delay**</font>を挟むだけ

##以上！
気が向いたらまだまだ追加するかも。現在進行形でFPSを製作中ですので何か面白いネタがあったら追加で書きます

明日は[regonn][link-1]さんの[Pythonと機械学習をUE4で使ってみる]です。楽しみですね！
[link-1]:https://qiita.com/regonn