はじめに
キャラクタの挙動や演出を制御するために、キャラクタが今乗っている床(地面)の各情報を取得するケースは多いかと思います。その時よく用いられるのがLineTraceですが、様々な資料で解説されている通り、重めの処理なので頻繁に呼び出すと問題になる可能性があります…

[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
https://www.slideshare.net/EpicGamesJapan/cedec2018-ue4-111105729/115
この問題を解決するための機能・Tipsはいくつかあるのですが、今回はたぶんマイナーな Character Movement ComponentのCurrentFloorについて紹介します。
CharacterMovementComponent の CurrentFloorについて

みんなだいすき(?)Character Movement Component、キャラクタの動きを制御する過程でCapsuleやLineTraceを使った床の判定処理 (UCharacterMovementComponent::FindFloorなど) を実行しています。その結果がCharacter Movement Componentの```CurrentFloor``に格納されています。
そのため、LineTraceによる床情報の取得処理を実装しなくても、CurrentFloorから床のActor情報や床の傾きなど様々な情報を取得することができます。
例えば床の傾きによってモーションを変えたい場合は、CurrentFloor->Hit Result->Normalから必要な情報を取得できます!
床の情報を使いたいときはLineTraceを使う前に、まずはCharacter Movement ComponentのCurrentFloorで実現できないか検討するようにしましょう!
おまけ
LineTraceと異なりFCollisionQueryParamsのbReturnPhysicalMaterialが有効になってないので、CurrentFloorのHit ResultからPhys Mat(物理マテリアル)情報を正常に取得することはできません。
FHitResultより
/**
* Physical material that was hit.
* @note Must set bReturnPhysicalMaterial on the swept PrimitiveComponent or in the query params for this to be returned.
*/
UPROPERTY()
TWeakObjectPtr<class UPhysicalMaterial> PhysMaterial;
そのため、Character Movement ComponentのCurrentFloorの情報を使って足音の制御をしたい場合は物理マテリアル以外の方法(Actor, Component Tagで判定したり…)を検討しましょう。
おしまい


