はじめに
UE5早期アクセスがついにリリースされたぞおおおお!!!!
www.unrealengine.com
そして、↑のサイトのFAQには
UE5 早期アクセスには Unreal Engine 4.26 に対する後方互換性があり、あなたの 4.26 向けのプロジェクトを UE5 早期アクセスで開くことが可能です。将来リリースされる Unreal Engine 4.27 については、4.27 向けのプロジェクトは早期アクセスとの互換性がありません。ただし、4.27 のプロジェクトは UE5 のフルリリースでは開くことができるようになる予定です。
とあります!
ということで、これまでUE4で開発していたKawaiiPhysicsをUE5で動かしてみましたが、少し対応が必要だったので備考録も兼ねて記事にしました。
話はいいからUE5版を使わせろ!という方はこちらからどうぞ
github.com
対応したこと
UnrealBuildTool.exe が見つからず実行できない不具合への対応
早速これまでのプロジェクトの .uproject を UE5-EAに変更した後にGenerate Visual Studio Project files`をすると
Couldn't find UnrealBuildTool at 'C:/Program Files/Epic Games/UE_5.0EA/Engine/Binaries/DotNET/UnrealBuildTool.exe'
と書かれたエラーウィンドウが出てきました。
軽く調べると修正途中の不具合のようで…UnrealGameSyncまたはGenerateProjectFiles.batを試してみてという状況のようです。が、面倒だったのでこちらの方法で解決しました。
UE5で右クリックからのGenerateProjectFilesがUnrealBuildTool.exeのパス間違いでコケるので、コマンドラインから作成するようにすれば大丈夫だった
— わか# (@Nekomimimofmof) 2021年5月26日
参考:https://t.co/PIfieEomTp pic.twitter.com/O2HwFX2W6S
僕の環境の場合だと以下の通り。手っ取り早く対応したかったのでフルパスを直指定という雑対応。
"C:\Program Files\Epic Games\UE_5.0EA\Engine\Binaries\DotNET\UnrealBuildTool\UnrealBuildTool.exe" -projectfiles -project="F:\Github\KawaiiPhysics-UE5\KawaiiPhysicsSample.uproject" -game -rocket -progress
これでUE5-EA用の.slnが無事作れました。
一部のファイルにアクセスできずビルドできない不具合への対応
これは環境依存な問題の気もしますが、作った.slnをウキウキでビルドしたら↓のエラーで即こけました。
UnrealBuildTool : error : Unhandled exception: System.UnauthorizedAccessException: Access to the path 'C:\Program Files\Epic Games\UE_5.0EA\Engine\Intermediate\EditorRuns\53228' is denied.
これはVisualStudioを管理者権限で実行することで解決
大量に出てきたビルドエラーを黙々と対応する話
やっと各コードのビルドが走ったと思ったら大量のビルドエラーが…ただ、よくよく見ると同じエラーばかりなので対応は楽そうです。
— おかず (@pafuhana1213) 2021年5月27日
FWidget:: を UE::Widget:: に置換
>F:\Github\KawaiiPhysics-UE5\Plugins\KawaiiPhysics\Source\KawaiiPhysicsEd\Public\KawaiiPhysicsEditModeBase.h(28): error C2039: 'EWidgetMode': is not a member of 'FWidget' 1> C:\Program Files\Epic Games\UE_5.0EA\Engine\Source\Editor\UnrealEd\Public\UnrealWidget.h(19): note: see declaration of 'FWidget'
KawaiiPhysicsEditMode, KawaiiPhysicsEditModeBaseで使っている FWidget::~ ですが、UE::Widget:: にnamespaceが変わってしまったので大量のエラーがでてました。例えば、FWidget::EWidgetModeとか
一気に置換して問題解決
USkeletalMesh::GetSkeleton()を使うように変更
1>/KawaiiPhysicsEditMode.cpp(73): warning C4996: 'USkeletalMesh::Skeleton': Please do not access this member directly; use USkeletalMesh::GetSkeleton() or USkeletalMesh::SetSkeleton(). Please update your code to the new API before upgrading to the next release, otherwise your project will no longer compile. 1>KawaiiPhysicsEditModeBase.cpp(362): warning C4996: 'USkeletalMesh::Skeleton': Please do not access this member directly; use USkeletalMesh::GetSkeleton() or USkeletalMesh::SetSkeleton(). Please update your code to the new API before upgrading to the next release, otherwise your project will no longer compile. 1>KawaiiPhysicsEditModeBase.cpp(432): warning C4996: 'USkeletalMesh::Skeleton': Please do not access this member directly; use USkeletalMesh::GetSkeleton() or USkeletalMesh::SetSkeleton(). Please update your code to the new API before upgrading to the next release, otherwise your project will no longer compile. 1>KawaiiPhysicsEditModeBase.cpp(696): warning C4996: 'USkeletalMesh::Skeleton': Please do not access this member directly; use USkeletalMesh::GetSkeleton() or USkeletalMesh::SetSkeleton(). Please update your code to the new API before upgrading to the next release, otherwise your project will no longer compile.
というエラーが出ていたので、SkeletalMesh->Skeleton としていた箇所を SkeletalMesh->GetSkeleton() に変更
EditorFrameworkモジュールを追加
Module.KawaiiPhysicsEd.cpp.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl FEditorModeInfo::FEditorModeInfo(class FName,class FText,struct FSlateIcon,class TAttribute<bool>,int)" (__imp_??0FEditorModeInfo@@QEAA@VFName@@VFText@@UFSlateIcon@@V?$TAttribute@_N@@H@Z) referenced in function "public: void __cdecl FEditorModeRegistry::RegisterMode<class FKawaiiPhysicsEditMode>(class FName,class FText,struct FSlateIcon,bool,int)" (??$RegisterMode@VFKawaiiPhysicsEditMode@@@FEditorModeRegistry@@QEAAXVFName@@VFText@@UFSlateIcon@@_NH@Z) 1>F:\Github\KawaiiPhysics-UE5\Plugins\KawaiiPhysics\Binaries\Win64\UnrealEditor-KawaiiPhysicsEd.dll : fatal error LNK1120: 1 unresolved externals
しばしば見るModuleが足りないよ系のエラーです。上記エラーで出てくる FEditorModeInfoは Engine\Source\Editor\EditorFramework\Private\Tools\Modes.h にあるので、Plugins\KawaiiPhysics\Source\KawaiiPhysicsEd\KawaiiPhysicsEd.Build.cs の PrivateDependencyModuleNames に "EditorFramework" を追加して解決。
(どうやらEditModeの基底のFEdModeで使われてるようです。その関係でAnimGraph.Build.cs にもこのモジュールが追加されてます)
上記の対応で無事ビルド成功し、KawaiiPhysicsがUE5上で動作するようになりました!
Kawaii PhysicsがUE5で動いたー!というわけで、 UE5対応版をGithubにアップしました。バイナリ版だけです。コード変更部分はブログにサクッとまとめようと思います。https://t.co/Oqudr8DYQt #UE5 #KawaiiPhysics pic.twitter.com/ypFywk8cA8
— おかず (@pafuhana1213) 2021年5月27日