実装すること

壁スライド状態への移行と監視

ジャンプ中かどうか、また壁に向かって方向キーが押されているかどうか

Untitled

IsDescending内ではPlayerのZベクトルが閾値よりも下かどうかで落下中(つまり通常ジャンプ中)かを判定している(今回はZベクトルが-30以下だったら)

Untitled

また、IsHoldingTowardsWall内ではPlayerのForwardベクトルXとIA_Moveの値(右に移動なら1,左なら-1が取得される)を乗算した際同じ方向なら必ず+の値になることを利用してPlayerの向いている方向に(つまりジャンプをした壁方向に向かって)移動キーも押されているかどうかを監視している。

壁スライドの処理

Untitled

LineTraceForObjectsを使用してRayを飛ばし、壁に近いかどうかを判断する。

現在のActorの位置から変数で宣言しておいた長さ文GetForwardVectorで正面にRayを飛ばし、MakeArrayを使用してWorldStaticオブジェクトのみ判定するようにフィルタをObjectTypesからかける。

Untitled

壁スライドはPlayerが壁をゆっくりと降りてくれるように処理すればよいのでCharacterMovementコンポーネントからX,Yベクトルの値はそのままにZベクトルのマイナス値をMAXで制限する。(今回は-20ほど)

Untitled

壁スライド中のアニメーションはIsWallSlidingで遷移を管理し、壁スライド中に銃を撃った際に対応できるようIsShootingでWallSlideShootの切り替えも行う。

また、使用しているSpriteが壁に対してCapsuleCollisionによって少し離れてしまうような場合、SpriteアセットのPivotModeをCustomにし、直接Pivotをずらすことで対処できる。