0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【UE5】パッケージでObjectSerializationErrorのFatalErrorが発生する場合はBuildCookRunの-nocompileeditorが原因かも

Posted at

概要

パッケージのexe起動後直ぐに↓のSerializeのFatalErrorが発生することがあります。
image.png

Fatal error: [File:D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\Serialization\AsyncLoading2.cpp] [Line: 2042] 
ObjectSerializationError: /Game/Blueprints/BP_TestGameMode (0x337255296EC6AFBB) /Game/Blueprints/BP_TestGameMode (0x337255296EC6AFBB) - BP_TestGameMode_C /Game/Blueprints/BP_TestGameMode.Default__BP_TestGameMode_C: Bad import index 572662306/14.

これが発生している場合はパッケージの生成が上手くできていません。
原因を調査したので備忘録として残しておきます。

■環境

  • Windows 11
  • UnrealEngine 5.5.4

まとめ

  • CookはEditorのdllを使って行われる
    • Editorのdllはエンジン/プロジェクト/プラグインのものが存在する
    • プロジェクトのEditorのdllは プロジェクトのルート/Binaries/Win64/UnrealEditor-プロジェクト名.dll に生成される
  • CookされたBPに存在しないはずのデータが入っている等の不整合があるとパッケージ起動時に Serialize の FatalError が発生する
    • 古いEditorのdllでCookが行われると BP に存在しないはずのデータが入ってしまう等の不整合が発生してしまう
  • BuildCookRunのオプションに-nocompileeditorを付けているのが原因の可能性が高い
    • -nocompileeditor のオプションが付いている場合はパッケージ作成時にEditorのdllの最新のソースコードでのビルドが行われず、Editorのdllが更新されない
      • 古いEditorのdllのままになる
    • Jenkins等のエディタを起動しない環境でBuildCookRunを動かす場合は-nocompileeditorのオプションを外しておくのが良さそう

検証

検証用プロジェクトについて

検証のために↓のプロジェクトを用意いたいました。

プロジェクト名は TestNoCompileEditor です。
ローカルPCでは d:\work\TestNoCompileEditor がプロジェクトのルートフォルダになっております。

正常にゲームが起動すると、↓のようなマップで一人称視点で動くプレイヤーが生成されます。
image.png

BuildCookRunは下記のような感じで行います。ビルド構成(-clientconfig)はDevelopmentです。

"C:\Program Files\Epic Games\UE_5.5\Engine\Build\BatchFiles\RunUAT.bat" ^
BuildCookRun ^
-project=%PROJECT_PATH% ^
-noP4 ^
-platform=Win64 ^
-clientconfig=Development ^
-cook ^
-allmap ^
-build ^
-stage ^
-pak ^
-partialgc

(※参考:[UE4]AutomationToolを使ってみる)

各種ファイルに関する説明は下記です。

ファイル 説明 備考
Content\Map\TestMap.umap 検証で使うレベルです
Source\TestNoCompileEditor\Private\GameMode\TestGameModeBase.h BP_TestGameModeの基底クラスです。UPROPERTY(EditDefaultsOnly)int32 Hoge;プロパティがありますimage.png
Content\Blueprints\BP_TestGameMode.uasset TestMapで設定されているGameModeです。Hogeプロパティの値をデフォルトの0から100に変更しますimage.png
Tool\Editor\MakePackage.bat BuildCookRunで -nocompileeditorを付けず にパッケージを作成します Editorのdllが更新されます。Saved\StagedBuilds\Windows にパッケージが作成されます
Tool\Editor\MakePackage_NoCompileEditor.bat BuildCookRunで -nocompileeditorを付けて にパッケージを作成します Editorのdllが更新されません。Saved\StagedBuilds\Windows にパッケージが作成されます
Tool\Editor\Launch_Stage_Standalone.bat パッケージをStandaloneで起動します Saved\StagedBuilds\Windows のパッケージを起動します

SerializeのFatalError を発生させる

MakePackage.bat を実行

UnrealEditor-TestNoCompileEditor.dllが作成され、Cookが行われ、Saved\StagedBuilds\Windowsに パッケージが作成されます
image.png

Launch_Stage_Standalone.bat を実行してパッケージ(exe)を起動します。特に問題なく起動します
image.png

ATestGameModeBaseのHogeプロパティをコメントアウトします
image.png

MakePackage_NoEditorCompile.bat を実行

UnrealEditor-TestNoCompileEditor.dllの更新が行われず(↓のスクショの通りタイムスタンプが前のMakePackage.batで生成されたときの23:03のまま)、Cookが行われ、Saved\StagedBuilds\Windowsに パッケージが作成されます
image.png

Launch_Stage_Standalone.bat を実行してパッケージ(exe)を起動します。BP_TestGameModeのSerializeでのFatalErrorが発生します。
image.png

Editorのdllを更新せずにCookを行ったため、BP_TestGameModeに本来存在しないはずのHogeが残ったままになり、Serializeでの不整合が起きていることが確認できました。

一回もエディタビルドを行わずに -nocompileeditorを付けてパッケージを作成すると?

Binariesフォルダを削除してプロジェクトのEditorのdllを削除し、一回もエディタビルドが行われていない状態にします。
image.png

MakePackage_NoEditorCompile.bat を実行

ビルドまでは成功するのですが、Cookの開始直後に失敗します。
下記のようにTestNoCompileEditorEditor.targetが無いと出ます。

System.IO.FileNotFoundException: Could not find file 'D:\work\TestNoCompileEditor\Binaries\Win64\TestNoCompileEditorEditor.target'.

image.png

Cookを行うためにはBPが属しているEditorのdllのパスを取得する必要があるのだと思われます。
TestNoCompileEditorEditor.targetにパスが記載されており、パスを取得しようとしてファイルを開こうとするのですが、エディタビルドが一回も行われていないとTestNoCompileEditorEditor.targetは生成されず、ファイルが存在しないので失敗しているようです。

試しに、Binaries\Win64フォルダに TestNoCompileEditorEditor.targetだけ追加して、MakePackage_NoEditorCompile.batを実行します。
image.png

今度はCookの開始直後ではなく、ある程度進んでから失敗しました。
image.png

Error_UnknownCookFailureと出力されており、失敗した正確な原因がこれだと良くわかりません。

より詳細なログが出力されている
C:\Users\%UserName%\AppData\Roaming\Unreal Engine\AutomationTool\Logs\C+Program+Files+Epic+Games+UE_5.5\Cook-*.txtを確認します。
TestNoCompileEditorが見つからないから失敗しているというログが出力されておりました。

Message dialog closed, result: Ok, title: Message, text: The game module 'TestNoCompileEditor' could not be found. Please ensure that this module exists and that it is compiled.

参考文献

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?