在播放器类的构造函数中,我使用ConstructorHelpers::FObjectFinder来获取蓝图动画类的链接。
static ConstructorHelpers::FObjectFinder<UAnimBlueprint> finderAnim(TEXT("AnimBlueprint'/Game/MixamoAnimPack/Mixamo_Adam/Anims/MixamoAnimBP_Adam.MixamoAnimBP_Adam'"));
然后我调用SetAnimClass()方法。
if (finderAnim.Succeeded())
PlayerMesh->SetAnimClass(finderAnim.Object->GetAnimBlueprintGeneratedClass());
在UE4编辑器中一切都正常,但是当我开始打包项目时,出了点问题,我得到了一个错误。
> PackagingResults: Warning: Error: CDO Constructor (Enemy): Failed to find /Game/MixamoAnimPack/Mixamo_Mortimer/Anims/MixamoAnimBP_Mortimer.MixamoAnimBP_Mortimer
有什么办法可以解决这个问题吗? 或者我应该创建一个播放器的蓝图类,然后在那里选择动画?
这里是 在虚幻引擎的论坛上也有类似的问题。
这是建议的解决方案。
在文件名末尾添加"_C",并将文件视为 "U类",这样运行起来会更顺畅。现在它在编辑器和打包的游戏中都能正常运行。
所以你对 finderAnim
会是什么样子。
static ConstructorHelpers::FObjectFinder<UClass> finderAnim(TEXT("AnimBlueprint'/Game/MixamoAnimPack/Mixamo_Adam/Anims/MixamoAnimBP_Adam.MixamoAnimBP_Adam_C'"));
PS:通过JamesG(首席程序员-UE4 AnimationPhysicsAudio团队)的回答,在 这个 线程来更清楚地理解它。
另一个可能更强大的解决方案是使用 FClassFinder
.
static ConstructorHelpers::FClassFinder<UAnimInstance> finderAnim(TEXT("/Game/MixamoAnimPack/Mixamo_Adam/Anims/MixamoAnimBP_Adam"));
然后,你可以简单地
PlayerMesh->SetAnimClass(finderAnim.Class);