Open9

ゲーム開発 ミニ備忘録

gugu

[問題] UE5.1 ゲーム開始時に、既にOverlapping状態だとOnBeginOverlapEventがコールされない

[解決] 衝突判定を行うActor両方に対して、このプロパティをtrueにする。デフォルトはfalse。
bGenerateOverlapEventsDuringLevelStreaming

gugu

[問題] UE5.0 キャラクターにジャンプアニメーションを再生させてもZ座標が変わらない

[解決] 通常、Unreal EngineにおいてルートモーションはZ軸に対しては適用されない。
適用するには、CharacterMovementのMovementModeをFryingにする必要がある。
ルートモーション有りのジャンプするアニメーションを再生させる際に、添付画像のようにMovementModeを変更させる。

アニメーションの再生が終わったら、MovementModeをWalkingなどの元の状態に戻す。

gugu

[問題] UE5.1 AGameplayCueNotify_ActorのOnRemoveが呼ばれない

[解決]
デフォルトの設定だと呼ばれない。呼ばれるようにする方法は2パターンある。

その1:AGameplayCueNotify_Actor の詳細にある、bAutoDestroyOnRemove をtrueにする。
このCueNotifyを実行したGamePlayEffectが適用し終わり自動的にOnRemoveを呼びたい場合はこれ。

その2:End (Recycle) Gameplay Cue を呼ぶ。
このQueNotifyを実行したGamePlayEffectに関わらず、任意のタイミングでOnRemoveを呼びたいときはこれ。

gugu

[問題] 【Rider】No analysis has been performed

[解決]
ソースファイルがAnalyzeされず、クラスや変数名に色が付かない状態だった
今回は単にそのソースファイルがRiderソリューションに追加されていないためだった。
そのため、配置されているフォルダを右クリック→Addをクリック→AddExistingItemクリックをすることで解決。

gugu

[問題] Generate Visual Studio project fileで does not exist というログは多数出力される

実際のログ
Engine\Engine\Source\Runtime\Messaging\Messaging.Build.cs: warning: Referenced directory 'F:\MyProjecDirectory\Source\Runtime\Messaging\Private' does not exist.

[解決]
私の場合、Engineフォルダをゲームプロジェクトの.uprojectが生成されるディレクトリに配置していたためこの問題が起きていた模様。
Engineフォルダをゲームプロジェクトの中から出すことで解決。

gugu

絶対パスを相対パスに変換

UBlueprintPathsLibrary::MakePathRelativeTo()

相対パスを絶対パスに変換

UBlueprintPathsLibrary::ConvertRelativePathToFull()

gugu

SVN : the following assets could not be successfully checked out from revision control

ファイルのチェックアウトと保存に失敗して見出しのログが出ていた。
エディタのリビジョンコントロールでSVNに接続し直すと解決。

gugu

[問題] UE5.2 エディタ立ち上げ時、UWidgetのGENERATED_UCLASS_BODY()でEnsureが入る / PIEしてウィジェットを生成すると、TakeDerivedWidget can only be used to create SObjectWidget instancesでエラー

[解決]
恐らくエンジンコードに誤って意図していない変更を入れてしまっていたのが原因。
エンジンをダウンロードし直したら解決。

(みんなもこういったことが起きないようにちゃんとエンジンのバージョン管理やったりして意図しない変更入れないようにしようね)

gugu

[問題] UE5.3 キー入力したままRestartGameすると、Restart後にキー入力していないにも関わらず入力されている挙動になる

[解決]
UPlayerInput::FlushPressedKeysをで呼び出して解決。
自分の場合はInputComponentにアクションをバインドする前に呼んだ。

[参考ソース]

const APlayerController* PC = GetController<APlayerController>();
PC->PlayerInput->FlushPressedKeys();