#よし、FPS作るぞ!
・この記事ではUnreal Engine4を使ってFPS(FirstPersonShooter)を作るときに参考になるかもしれないtips集をお届けしたいと思います。
この記事はUnreal Engine 4 Advent Calender 2019その2の20日目の記事です。
https://qiita.com/advent-calendar/2019/ue4_deux
##NearClipPlane
・FPSを作ったことがある方、または作ろうとした方が一度は目にするこの現象
カメラから近い場所をクリップしてしまう現象です。実はこれProject Settingsから緩和することが可能です。
試しにNear Clip Planeを5にしてみましょう。(初期値は10)
##WeaponCollision vs Wall
FPSゲーでよく見るこの現象、なるだけで僕はがっかりしてしまいます。いくつかの直し方があるので直してみましょう。
CapsuleCollisionのRadiusを大きくする
デフォルトが34ですが、それを80くらいにしてみました。
埋まらなくなりました!ですが、この方法は継承されているCapsule Collisionの大きさを変えているので場合によっては破綻する恐れがあります。(Capsule Collisioinで敵からの当たり判定などをとっている時などはまた別のCapsule Collisionを用意し当たり判定を取った方がいいです)
腕メッシュを前後に移動
これはCameraの下に腕のメッシュがある場合の解法になります。
銃メッシュのBarrel Socket(銃の先端)から画面の真ん中までLine Traceを飛ばし、ヒットしたらBarrelSocket-ImpactPointしたのをLength(長さ)にします。そのLengthを元にMap Range Clampedをし腕メッシュの位置を前後に移動させ埋まらなくさせています。こんな感じになります。
IKやらなんやらでごちゃごちゃやる方法もありますが、それだけで一本記事が書けちゃうくらい長いのでそれは後ほど
##ADS
ADS(AimDownSight)です。tipsというよりかは実装例になります
武器のクラスにCameraを追加します。関数を作成します。
基本的にはSet View Target With Blend関数でどうにでもなります。New View TargetのActorが新しいCameraになります。CameraをComponentに含むクラスであれば問題なくCameraの遷移が行われます。この関数をプレイヤーのクラスで呼び出すことでADSが可能になります。
##銃の発射処理
・セミオート
単純に銃クラスのFire関数を実行するだけ
・フルオート
銃クラスのFireをSet Timer by Function Nameで実行するだけ
##以上!
気が向いたらまだまだ追加するかも。現在進行形でFPSを製作中ですので何か面白いネタがあったら追加で書きます
明日は[regonn][link-1]さんの[Pythonと機械学習をUE4で使ってみる]です。楽しみですね!
[link-1]:https://qiita.com/regonn