お世話になってます。
キャラクターの移動で意図しない挙動になる事があったので報告と修正方法についての質問となります。
MovementModeがFlyingの状態で天井付近の壁に接触した場合、なぜかMaxStepHeightぶんキャラクターが下に下がってしまいます。
(添付動画参照。ThirdPersonのサンプルを改造してMovementModeをFlyingにして上昇できるようにしたものとなります。)
原因を調査したところ、UCharacterMovementComponent::StepUp関数の処理が原因である事がわかりました。
UCharacterMovementComponent::StepUp関数では
- キャラクターを上に上げる
- キャラクターを前に進める
- キャラクターを下に下げる
という処理を行っていると思います。
1.のキャラクターを上に上げる処理で天井に阻まれた場合、天井に阻まれて実際はMaxStepHeightぶん上に上げられなかったにもかかわらず、3.のキャラクターを下に下げる処理ではそれを考慮せずに下に下さげるため、結果としてMaxStepHeightぶん下に下がる挙動になるという事がわかりました。
この問題の修正方法としてUCharacterMovementComponent::StepUp関数の中を改造してキャラクターを上に上げる処理の後に下記のコードを追加する事で暫定の対処としました。
if (SweepUpHit.bBlockingHit)
{
// Step upで実際に上に上がったぶん以上はStep downで下げないようにする
StepTravelDownHeight *= SweepUpHit.Time;
}
この問題は既知の問題でしょうか?
もし既知の問題であって、エンジン改造を伴わないもっと的確な修正方法があるのであれば教えて頂けると幸いです。
よろしくお願い致します。
[Attachment Removed]