LoginSignup
15
6

More than 3 years have passed since last update.

[UE4] CharacterMovementComponentのCurrentFloorから床(地面)の情報を取得しよう!

Last updated at Posted at 2019-12-12

はじめに

キャラクタの挙動や演出を制御するために、キャラクタが今乗っている床(地面)の各情報を取得するケースは多いかと思います。その時よく用いられるのがLineTraceですが、様々な資料で解説されている通り、重めの処理なので頻繁に呼び出すと問題になる可能性があります…
image.png
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック  
https://www.slideshare.net/EpicGamesJapan/cedec2018-ue4-111105729/115

この問題を解決するための機能・Tipsはいくつかあるのですが、今回はたぶんマイナーな Character Movement ComponentCurrentFloorについて紹介します。

CharacterMovementComponent の CurrentFloorについて

image.png
みんなだいすき(?)Character Movement Component、キャラクタの動きを制御する過程でCapsuleやLineTraceを使った床の判定処理 (UCharacterMovementComponent::FindFloorなど) を実行しています。その結果がCharacter Movement Componentの`CurrentFloorに格納されています。

0.png
18.png
32.png

そのため、LineTraceによる床情報の取得処理を実装しなくても、CurrentFloorから床のActor情報や床の傾きなど様々な情報を取得することができます。
例えば床の傾きによってモーションを変えたい場合は、CurrentFloor->Hit Result->Normalから必要な情報を取得できます!

床の情報を使いたいときはLineTraceを使う前に、まずはCharacter Movement ComponentCurrentFloorで実現できないか検討するようにしましょう!

おまけ

LineTraceと異なりFCollisionQueryParamsbReturnPhysicalMaterialが有効になってないので、CurrentFloorHit 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 ComponentCurrentFloorの情報を使って足音の制御をしたい場合は物理マテリアル以外の方法(Actor, Component Tagで判定したり…)を検討しましょう。

おしまい

15
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
6