UE5を触り始めて、WorldSubsystemを使おうとしたところ、WorldSubsystemを追加した途端にBPエディタを開く度にエラーが発生するようになってしまいました。
何度もプロジェクトを作りなして、やり直しましたが再現率が100%です。
環境が悪いか、WorldSubsystemの追加方法が悪いのかもしれまんせんが、質問させて頂ければと思います。
環境はUE5+VSCode
(Visual Studio Community2019もインストール済みですが、IDEはVSCodeを使用)
また、UE5の設定もVSCodeを使用するように設定済みです。
再現の方法は以下の通りです。
1.UE5でThirdPersonTemplateを新規作成
2.[ツール]->[新規 C++クラス]を選択
3."全てのクラス"を選択し、"WorldSubsystem"で検索し、“WorldSubsystem"を選択した状態で次へ
4.デフォルトの"MyWorldSubsystem"のままで"クラスを作成”
5.メッセージダイアログに「プロジェクトにソースが含まれます。エディタを閉じてIDEからビルドしてください。」と表示されるので"OK"をクリック
6.メッセージダイアログに「クラス ‘MyWorldSubsystem’の追加に成功しました。ただしコンテントブラウザに表示されるようにするには’[プロジェクト名]’ モジュールをコンパイルする必要があります。コード編集を行いますか?」と表示されるので"はい"をクリック
7.VSCodeが立ち上がる
8.一旦UE5を終了
9.再度UE5を起動し、上記のプロジェクトを開く
10.以下のメッセージダイアログが開くので"はい"ボタンをクリック
Missing [プロジェクト名] Modules
The following modules are missing or built with a different engine version:
[プロジェクト名]
Would you like to rebuild them now?
はい(Y) いいえ(N)
11.対象プロジェクトが起動
12.UE5の右下に表示されるようになったコンパイルボタンをクリック → コンパイル成功
13.C++で以下のソースを作成(MyWorldSubsystem.hのGENERATED_BODY配下)
public:
UFUNCTION(BlueprintCallable)
int32 GetScore(){ return Score; }
private:
int32 Score;
14.再度コンパイルして正常終了を確認
15.なんでも良いのでBPを新規作成し、編集しようとダブルクリックすると、以下のクラッシュレポートが表示されてUE5が落ちる
Assertion failed: Ret->IsA(T::StaticClass()) [File:D:\build++UE5\Sync\Engine\Source\Runtime\CoreUObject\Public\UObject\Class.h] [Line: 3119]
UnrealEditor_Engine!FSubsystemCollectionBase::AddAndInitializeSubsystem() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\Subsystems\SubsystemCollection.cpp:246]
UnrealEditor_Engine!FSubsystemCollectionBase::Initialize() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\Subsystems\SubsystemCollection.cpp:138]
UnrealEditor_Engine!UWorld::InitWorld() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\World.cpp:1751]
UnrealEditor_Engine!UWorld::InitializeNewWorld() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\World.cpp:2019]
UnrealEditor_Engine!FPreviewScene::FPreviewScene() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\PreviewScene.cpp:48]
UnrealEditor_Kismet!FBlueprintEditor::FBlueprintEditor() [D:\build++UE5\Sync\Engine\Source\Editor\Kismet\Private\BlueprintEditor.cpp:1749]
UnrealEditor_Kismet!FBlueprintEditorModule::CreateBlueprintEditor() [D:\build++UE5\Sync\Engine\Source\Editor\Kismet\Private\BlueprintEditorModule.cpp:274]
UnrealEditor_Kismet!FBlueprintEditorModule::CreateBlueprintEditor()
以下、略
16.UE5再起動
17.改めて、上記15.で作ろうとしたBPを作ってみる
18.BPエディタが開く
19.BPからC++で作ったMyWorldSubsystemのメソッドをコールしようとするが、メソッドが表示されないので、BPエディタを一旦閉じて、C++を再コンパイルする → C++コンパイル正常終了
20.BPエディタを再び開くと、上記と同じクラッシュレポートが表示されて落ちる
21.C++で作ったMyWorldSubsystemのヘッダーから追加部分を削除し、再コンパイルして、BPを開く分にはエラーは発生せず