原项目时UE5.3的,我把它转换成UE5.6,提前删除了系统生成的中间文件,只保留编译必要的文件,使用UE5.6编译项目时,编译失败,Rider编辑器提示如下问题
bash
11>Microsoft.MakeFile.Targets(44,5): Error MSB3073 : 命令""G:\Unreal Engine\UE_5.6\Engine\Build\BatchFiles\Build.bat" AuraEditor Win64 Development -Project="XXXXXXXXXXX" -WaitMutex -FromMsBuild -architecture=x64"已退出,代码为 6。
对应到出问题的代码:
xml
<Target Name="Build" DependsOnTargets="PrepareForNMakeBuild;ResolveReferences;GetTargetPath;$(PreNMakeBuildTarget)" Returns="$(NMakeManagedOutput)">
<VCMessage Code="MSB8005" Type="Warning" Arguments="NMakeBuildCommandLine" Condition="'$(NMakeBuildCommandLine)'==''"/>
<Exec Command="$(NMakeBuildCommandLine)" Condition="'$(NMakeUseOemCodePage)' == 'true' and '$(NMakeBuildCommandLine)'!=''"/>
<Exec Command="$(NMakeBuildCommandLine)" UseUtf8Encoding="Always" StdErrEncoding="UTF-8" StdOutEncoding="UTF-8" Condition="'$(NMakeUseOemCodePage)' != 'true' and '$(NMakeBuildCommandLine)'!=''"/>
</Target>
指向
xml
<Exec Command="$(NMakeBuildCommandLine)" Condition="'$(NMakeUseOemCodePage)' == 'true' and '$(NMakeBuildCommandLine)'!=''"/>
我找了一个UE5.6编译成功的项目和当前项目,对比了一下Target.cs文件:
成功的Target.cs文件
csharp
// Copyright Epic Games, Inc. All Rights Reserved.
using UnrealBuildTool;
using System.Collections.Generic;
public class RPGGameTarget : TargetRules
{
public RPGGameTarget(TargetInfo Target) : base(Target)
{
Type = TargetType.Game;
DefaultBuildSettings = BuildSettingsVersion.V5;
IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_6;
ExtraModuleNames.Add("RPGGame");
}
}
失败的Target.cs文件
csharp
// Copyright Druid Mechanics
using UnrealBuildTool;
using System.Collections.Generic;
public class AuraTarget : TargetRules
{
public AuraTarget(TargetInfo Target) : base(Target)
{
Type = TargetType.Game;
DefaultBuildSettings = BuildSettingsVersion.V2;
ExtraModuleNames.AddRange( new string[] { "Aura" } );
}
}
成功的Editor.Target.cs文件
csharp
// Copyright Epic Games, Inc. All Rights Reserved.
using UnrealBuildTool;
using System.Collections.Generic;
public class RPGGameEditorTarget : TargetRules
{
public RPGGameEditorTarget( TargetInfo Target) : base(Target)
{
Type = TargetType.Editor;
DefaultBuildSettings = BuildSettingsVersion.V5;
IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_6;
ExtraModuleNames.Add("RPGGame");
}
}
失败的Editor.Target.cs文件
csharp
// Copyright Druid Mechanics
using UnrealBuildTool;
using System.Collections.Generic;
public class AuraEditorTarget : TargetRules
{
public AuraEditorTarget(TargetInfo Target) : base(Target)
{
Type = TargetType.Editor;
DefaultBuildSettings = BuildSettingsVersion.V2;
ExtraModuleNames.AddRange( new string[] { "Aura" } );
}
}
看起来新版本字段上有一些变化,所以将失败的cs文件根据新的字段改写一下:
更新后的Target.cs文件
csharp
// Copyright Druid Mechanics
using UnrealBuildTool;
using System.Collections.Generic;
public class AuraTarget : TargetRules
{
public AuraTarget(TargetInfo Target) : base(Target)
{
Type = TargetType.Game;
DefaultBuildSettings = BuildSettingsVersion.V5;
IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_6;
ExtraModuleNames.Add("Aura");
}
}
更新后的Editor.Target.cs文件
csharp
// Copyright Druid Mechanics
using UnrealBuildTool;
using System.Collections.Generic;
public class AuraEditorTarget : TargetRules
{
public AuraEditorTarget(TargetInfo Target) : base(Target)
{
Type = TargetType.Editor;
DefaultBuildSettings = BuildSettingsVersion.V5;
IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_6;
ExtraModuleNames.Add("Aura");
}
}
删除不必要的中间文件,再用uproject重新生成sln,再次编译
又提示了新的错误:提示只支持uint8
cpp
UENUM(BlueprintType)
enum class EEffectApplicationPolicy
{
ApplyOnOverlap,
ApplyOnEndOverlap,
DoNotApply
};
UENUM(BlueprintType)
enum class EEffectRemovalPolicy
{
RemoveOnEndOverlap,
DoNotRemove
};
修改后
cpp
UENUM(BlueprintType)
enum class EEffectApplicationPolicy: uint8
{
ApplyOnOverlap,
ApplyOnEndOverlap,
DoNotApply
};
UENUM(BlueprintType)
enum class EEffectRemovalPolicy: uint8
{
RemoveOnEndOverlap,
DoNotRemove
};
再次编译 又出现新的问题:
cpp
11>AuraAbilitySystemLibrary.cpp(465,8): Error C2027 : 使用了未定义类型"FOverlapResult"
参考如下文档:
Gameplay Ability System Course Project - Development Blog
FOverlapResult::FOverlapResult
添加一个头文件:
cpp
#include "Engine/OverlapResult.h"
编译成功