自分たちのプロジェクトをUnrealEngine5.3にアップグレードした際にCesium for Unrealプラグインをプロジェクト内のPluginsフォルダに配置しようとするとエラーなってできないという問題が発生しました。
ここでは、問題の内容とその対応方法についてメモしておきます。
自分の環境
UnrealEngine5.3.2
Cesium for Unreal 2.3.0
発生した問題
Cesium for UnrealプラグインをプロジェクトのPluginsフォルダに配置すると以下のようなエラーが大量に出てプロジェクトがビルドできませんでした。
UE_5.3\Engine\Source\Runtime\UMG\Public\FieldNotification\FieldNotificationDeclaration.h(15): warning C4996: 'FieldNotificationDeclarationHeaderDeprecatedWarning': Including FieldNotification/FieldNotificationDeclaration.h is deprecated. The location of has changed. Please include FieldNotificationDeclaration.h instead and add the module FieldNotification to your .build.cs Please update your code to the new API before upgrading to the next release, otherwise your project will no longer compile.
UE_5.3\Engine\Source\Runtime\UMG\Public\Components\Widget.h(222): error C4042: 'unnamed-parameter': has bad storage class
UE_5.3\Engine\Source\Runtime\UMG\Public\Components\Widget.h(223): error C3646: 'UE_FIELD_NOTIFICATION_DECLARE_FIELD': unknown override specifier
UE_5.3\Engine\Source\Runtime\UMG\Public\Components\Widget.h(223): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Cesium for UnrealプラグインをEngineに配置するとエラーは発生せずにビルドできました。
対応した方法
先に結果から書くとCesium for Unreal中のCeciumRuntime.Build.csに以下のようにDefaultBuildSettingsを追加すると問題なくビルドできました。
public class CesiumRuntime : ModuleRules
{
public CesiumRuntime(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;
ShadowVariableWarningLevel = WarningLevel.Off;
DefaultBuildSettings = BuildSettingsVersion.V4; // <= 追加
原因の調査
原因はよくわかってないですが、自分のプロジェクトのビルド設定が古いので、includeのパスの関係で新しいビルド設定が必要なCesium for Unrealプラグインでエラーになっていたようです。
以下では調査した内容を記載しておきます。
Ceciumのサンプルプロジェクトで同じようにプラグインをプロジェクト内に配置してもエラーは発生しませんでした。
サンプルプロジェクトでEditorからC++コードを追加し、生成されたTarget.csを確認したところ以下のようなコードが含まれており、このコードをコメントアウトすると同じようなエラーになりました。
DefaultBuildSettings = BuildSettingsVersion.V4;
自分のプロジェクトを確認したところ、DefaultBuildSettingsの設定はTarget.csに記述されていませんでした。
DefaultBuildSettingsについて公式サイトのドキュメントでは以下のように記述されているがよくわかりません。
DefaultBuildSettings (BuildSettingsVersion)
後方互換性があるデフォルト ビルド設定を維持するエンジン バージョン > >> ?(DefaultSettingsVersion.Release_4_23、DefaultSettingsVersion.Release_4_24 など) を指定します。現>在のエンジン バージョンのデフォルト設定が常に使用されるように DefaultSettingsVersion.Latest を指定します。ただし、アップグレード時にビルド エラーが生じるリスクを伴います。
ただ、以下のような話をみるとどうもincludeのパスの挙動に関係しているようです。
https://github.com/getnamo/BLUI-Unreal/issues/52
以下のフォーラムの質問でも同じようなエラーについて書いてありました。
https://forums.unrealengine.com/t/is-including-widgetcomponent-h-no-longer-possible-in-5-3/1388339
こちらも内容や対応方法はよくわかっていないですが、どうもincludeのパスの関係でそうなっているようです。