MovementModeがFlyingの状態で天井付近の壁に接触するとMaxStepHeightぶんキャラクターが下に下がってしまいます

お世話になってます。

キャラクターの移動で意図しない挙動になる事があったので報告と修正方法についての質問となります。

MovementModeがFlyingの状態で天井付近の壁に接触した場合、なぜかMaxStepHeightぶんキャラクターが下に下がってしまいます。

(添付動画参照。ThirdPersonのサンプルを改造してMovementModeをFlyingにして上昇できるようにしたものとなります。)

原因を調査したところ、UCharacterMovementComponent::StepUp関数の処理が原因である事がわかりました。

UCharacterMovementComponent::StepUp関数では

  1. キャラクターを上に上げる
  2. キャラクターを前に進める
  3. キャラクターを下に下げる

という処理を行っていると思います。

1.のキャラクターを上に上げる処理で天井に阻まれた場合、天井に阻まれて実際はMaxStepHeightぶん上に上げられなかったにもかかわらず、3.のキャラクターを下に下げる処理ではそれを考慮せずに下に下さげるため、結果としてMaxStepHeightぶん下に下がる挙動になるという事がわかりました。

この問題の修正方法としてUCharacterMovementComponent::StepUp関数の中を改造してキャラクターを上に上げる処理の後に下記のコードを追加する事で暫定の対処としました。

if (SweepUpHit.bBlockingHit)
{
	// Step upで実際に上に上がったぶん以上はStep downで下げないようにする
	StepTravelDownHeight *= SweepUpHit.Time;
}

この問題は既知の問題でしょうか?

もし既知の問題であって、エンジン改造を伴わないもっと的確な修正方法があるのであれば教えて頂けると幸いです。

よろしくお願い致します。

[Attachment Removed]

再現手順[Attachment Removed]

ご質問ありがとうございます。

Epic Gamesでは昨年12/20から本年1/4まで冬期休暇を頂戴していたため、本件は本日からの対応となります。お待たせしてしまい、たいへん申し訳ございません。

確認が取れ次第、回答申し上げますので、今しばらくお待ちください。

よろしくお願いいたします。

[Attachment Removed]

お世話になっております。

ご報告いただいた症状ですが、調査いたしましたところ社内外から他に報告例がなく、新規の不具合といえます。​そのため、大変恐縮ながら、現状では確立した修正手段がございません。

また、UCharacterMovementComponent::StepUp()を下位クラス側で完全にオーバーライドするような乱暴なやり方を除けば、エンジンへのパッチは必須と思われます。

本件は準備を整え次第、社内のバグトラッカーに報告を行います。​

取り急ぎ、ご回答申し上げます。

[Attachment Removed]

ご回答ありがとうございます。

他に同様の報告例がなく、本件が新規の不具合であること、また現時点では確立された修正手段がないことを承知いたしました。

当面は前述の暫定対処で対応し、正式な修正がバグトラッカー上で公開され次第、取り込み作業を進めさせていただきます。

[Attachment Removed]

お世話になっております。

大変お待たせいたしました。

社内のバグトラッカーへの登録が完了しました。

Public Issue化の承認が得られ次第(通常、2~3営業日ほどかかります)、下記のURLから修正状況の追跡を行っていただけます。

それでは本件は回答済みとして、チケットをCloseさせていただきます。

正式対応までご不便をおかけしますが、よろしくお願いいたします。

[Attachment Removed]