【UE5】プラグインをUE5.4にバージョンアップしたらいろいろエラーが出て対処した
Shift Lens CameraなどいくつかUnreal Engine 5でプラグイン開発をしているのですが、バージョンアップ作業なんていつもはうまくいくことを確認してお終いって程度の時間しかかからなかったのが5.4.0のときはやたらエラーが出まくってけっこうな時間を持ってかれた、という話です。
最終的には解決できたのですが、色々面倒だったのでメモを残します
やってみよう
今回の話ではShift Lens CameraのUE5.3をリリースした環境を、UE5.4にバージョンアップしたところ、プラグインのコンパイルエラーで起動できませんでしたっていう話しで。
エラー内容 その1
Visual Studio 2019で起動すると、まずはこのエラーが出ました。
NETSDK104: 現在の.NET SDKは、ターゲットとする.NET6.0をサポートしていません。
【対策】Visual Studio 2022を使いましょう。必須です。
理由は.NET 6.0はVisual Studio 2019では利用不可だからです。
ちなみに調べるとUE5.1か5.2くらいからこのエラーが出るはずなので、常に最新バージョンを利用している方は対策済みかなと思います。
エラー内容 その2
次にこんなエラーが出ました。
C:\Unreal Engine\UE_5.4\Engine\Source\Developer\LowLevelTestsRunner\LowLevelTestsRunner.Build.cs(19,65,19,71): error CS0103: The name ‘Catch2’ does not exist in the current context
【対策】エンジンソースのUE_5.4\Engine\Source\Developer\LowLevelTestsRunner\LowLevelTestsRunner.Build.csを編集する。
手順:
1. ファイルで右クリックメニュー→プロパティを開いて、[読み取り専用]をOFFにする。
2. LowLevelTestsRunner.Build.csファイルを開いて、19行目を”v3.4.0″に書き換えます。
前
Path.Combine(Target.UEThirdPartySourceDirectory, "Catch2", Catch2.Version, "src")
後
Path.Combine(Target.UEThirdPartySourceDirectory, "Catch2", "v3.4.0", "src")
詳しいことは下記のフォーラムで。
UE 5.4 compile error Catch2 – Unreal Engine Forums
エラー内容 その3
ここまでして再ビルドすると、ようやく自分のソースコードに対してコンパイルがかかっているような挙動をしました。一安心。
かと思いきや、コンパイルエラーが結構いろいろ出てきました。えーっ。
error C2878: ‘????’: この名前の名前空間またはクラスがありません。 定義されていない名前空間またはクラスを参照しました。
TWeakObjectPtr ViewRenderTarget = GetOrCreateViewRenderTarget(InOutSampleState.BackbufferSize, OptPayload);
【対策】インクルードを追加する。
素直に対処します。
参照できてないならばエラーが出ているクラスやメソッドをちゃんと見えるようにIncludeを追加します。
なぜ今まで大丈夫だったかは考えるのやめました。
エラー内容 その4
はいーこれで終わったーお疲れ! と思ったら最後に大爆撃が来ました。
fatal error C1083: インクルードファイルがオープンできません。’ShiftLensCamera.h’
【対策】*.build.csや*.vcxprojなどの参照に関わりそうなファイルの差異を全部解消する。
意味わからん。プラグイン開発で自動生成してくれる箇所じゃないか。無心で対処。
下記のファイルの差分を解消しました。
手順:
1. UE5.4で適当に新規プロジェクトを作成。起動したら対応中のプラグインと同じ名前でプラグインを新規作成する。
2. 下記のファイルのDiffを取って、差分を埋める。
Intermediate\ProjectFiles\{プロジェクト名}.vcxproj
私の場合は<IncludePath>と<AdditionalOptions>の2箇所がまっさらになっていました。
エラー内容 その5
ここまできたらビルドが成功し、Visual Studioからデバッグ起動でUnreal Editorが起動できました。
プラグインをパッケージ化するとエラーが出ました。エラー内容を残すのを忘れましたがたぶんこれ。「ビルド設定がおかしい」みたいなエラーが出た。
Packaging (Windows): Remove the modified setting, change ZEDUnrealLiveLink to use a unique build environment by setting ‘BuildEnvironment = TargetBuildEnvironment.Unique;’ in the ZEDUnrealLiveLinkTarget constructor, or set bOverrideBuildEnvironment = true to force this setting on.
【対策】Source\{プラグイン名}.Traget.csとSource\{プラグイン名}Editor.Traget.csファイルを修正する。
次の2ファイルを修正します。
手順:
1. UE5.4で適当に新規プロジェクトを作成。起動したら対応中のプラグインと同じ名前でプラグインを新規作成する。
2. 新規プロジェクトのSourceフォルダと、対応中のプラグインを含むプロジェクトのSourceフォルダとでDiffを取る。
下記の2ファイルでちょっと差分が出ています。
{プロジェクトフォルダ}\Source\{プラグイン名}.Traget.cs
{プロジェクトフォルダ}\Source\{プラグイン名}Editor.Traget.cs
修正内容はこんな感じでした。
前
public SLCPluginProjectTarget(TargetInfo Target) : base(Target) { Type = TargetType.Game; DefaultBuildSettings = BuildSettingsVersion.V2; ExtraModuleNames.AddRange( new string[] { "SLCPluginProject" } ); }
後
public SLCPluginProjectTarget(TargetInfo Target) : base(Target) { Type = TargetType.Game; DefaultBuildSettings = BuildSettingsVersion.V5; ExtraModuleNames.Add("SLCPluginProject"); }
エラー内容 その6
これでもうエラーはなさそうなんですが、なんかパッケージ化エラーがでる。BUILD SUCCEEDって出てるんですけどね。
Unreal Editorの出力ログのところをよく見たら下記のコンパイルエラーが出ていました。
error C2440: ‘????’: cannot convert from ‘????????’
FRenderTarget* RenderTarget = ViewRenderTarget->GameThread_GetRenderTargetResource();
【対策】覚えてない…Visual Studioでソリューションのクリーンとかが効いたのかもしれません。
キャストエラーですが、結局どの対応で直ったのかが分からなかった。
そういえばこの間にUnreal Engine Test Adapterはインストールしましたけど、それは関係なさそうです。
参考サイト
・UE5.0 パッケージ化用 Visual Studio 設定 – UE5攻略How
・UE 5.4 compile error Catch2 – Unreal Engine Forums