基于C++代码的UE4学习(三十八)——加载SkeletalMesh与静态加载动画蓝图

本文详细介绍了在UE4中如何为敌人角色加载SkeletalMesh和动画蓝图,避免内存错误。通过FindComponentByClass定位SkeletalMeshComponent,使用ConstructorHelpers加载资源,并推荐动态加载动画蓝图以确保稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

加载SkeletalMesh需要在Enemy类中定义一个SkeletalMeshComponent

由于Enemy类是继承自ACharacter类的,所以SkeletalMesh找到的办法是通过FindComponentByClass<T>();

并没有重新声明一个新的。

 

 1     skeletal = this->FindComponentByClass<USkeletalMeshComponent>();
 2     if (skeletal) {
 3         auto assetSkeletal = ConstructorHelpers::FObjectFinder<USkeletalMesh>(TEXT("SkeletalMesh'/Game/Mannequin/Character/Mesh/SK_Mannequin.SK_Mannequin'"));
 4         if (assetSkeletal.Succeeded()) {
 5             skeletal->SetSkeletalMesh(assetSkeletal.Object);
 6             skeletal->SetRelativeLocation(FVector(0, 0, -95));
 7             skeletal->SetRelativeRotation(FRotator(0, -90, 0));
 8         }
 9     }
10     AIControllerClass = AMyAIController::StaticClass();
11     
12 
13     auto assetTree = ConstructorHelpers::FObjectFinder<UBehaviorTree>(TEXT("BehaviorTree'/Game/Asset/myTree.myTree'"));
14 
15 
16     if (assetTree.Succeeded()) {
17         Tree = assetTree.Object;
18     }
19 
20     skeletal->SetAnimationMode(EAnimationMode::AnimationBlueprint);

 

 

静态加载动画蓝图

 

静态加载动画蓝图是会报错的,但是在编译的时候是成功的,等再次启动工程就会出问题。

 

1     //the wrong way!!!!!!! Animation Blueprint cannot load like this way
2     auto assetAaim = ConstructorHelpers::FClassFinder<UAnimInstance>(TEXT("AnimBlueprint'/Game/Mannequin/Animations/ThirdPerson_AnimBP.ThirdPerson_AnimBP_C'"));
3     if (assetAaim.Succeeded()) {
4 
5         skeletal->SetAnimInstanceClass(assetAaim.Class);
6     }

 

加载类型为UAnimInstance,而不是UAnimBlueprint,需要注意。因为是蓝图类,在资源后需要加上“_C”,否则无法加载成功。

最后通过SetAnimInstanceClass(UClass*)加载动画蓝图类,编译成功。但是不建议这样做,会引起内存异常。建议动态加载。

 

 1 void AEnemy::BeginPlay()
 2 {
 3     Super::BeginPlay();
 4     UClass* Anima = LoadClass<UAnimInstance>(NULL,TEXT("AnimBlueprint'/Game/Mannequin/Animations/ThirdPerson_AnimBP.ThirdPerson_AnimBP_C'"));
 5     skeletal->SetAnimInstanceClass(Anima);
 6 
 7     //Binding Delegate
 8     Sense->OnSeePawn.Add(SightDelegate); //让AI具备视力,视觉回调
 9     Sense->OnHearNoise.Add(HearDelegate); //让AI具备听力,听觉回调
10 }

 

使用动态加载蓝图再次编译,点击开始游戏就会看见模型与动画资源都已经成功加载,也不会出现内存错误。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值