虚幻引擎UE5专用服务器游戏开发-21 连招技能动画蒙太奇播放

1.在Combo能力类里.创建存储蒙太奇实例的指针变量

Source/Crunch/Public/GAS/GameplayAbility/GA_Combo.h

cpp 复制代码
private:
	UPROPERTY(EditDefaultsOnly, Category="Animation|Montage")
	UAnimMontage* ComboMontage;		//连招蒙太奇
	

2.ActivateAbility方法里,满足条件时,播放蒙太奇:

Source/Crunch/Private/GAS/GameplayAbility/GA_Combo.cpp

cpp 复制代码
void UGA_Combo::ActivateAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo,
	const FGameplayAbilityActivationInfo ActivationInfo, const FGameplayEventData* TriggerEventData)
{
	Super::ActivateAbility(Handle, ActorInfo, ActivationInfo, TriggerEventData);
	// if (!CommitAbility(Handle, ActorInfo, ActivationInfo))
	if (!K2_CommitAbility())
	{
		// EndAbility(Handle, ActorInfo, ActivationInfo, true, false);
		K2_EndAbility();
		return;
	}

	//有权限或者预测键时,播放蒙太奇
	if (HasAuthorityOrPredictionKey(ActorInfo, &ActivationInfo))
	{
		// checkf(ComboMontage, TEXT("ComboMontage 是空的!"));
		UAbilityTask_PlayMontageAndWait* PlayComboMontageTask = UAbilityTask_PlayMontageAndWait::CreatePlayMontageAndWaitProxy(this, NAME_None, ComboMontage);
		//动态结束能力
		PlayComboMontageTask->OnBlendOut.AddDynamic(this, &UGA_Combo::K2_EndAbility);
		PlayComboMontageTask->OnCancelled.AddDynamic(this, &UGA_Combo::K2_EndAbility);
		PlayComboMontageTask->OnCompleted.AddDynamic(this, &UGA_Combo::K2_EndAbility);
		PlayComboMontageTask->OnInterrupted.AddDynamic(this, &UGA_Combo::K2_EndAbility);
		//执行任务
		PlayComboMontageTask->ReadyForActivation();
	}
}

代码功能概述

这段代码实现了UGA_Combo类中连招技能的激活逻辑,主要包含以下核心功能:

  1. 能力激活的基类调用与验证

  2. 蒙太奇动画的权限控制与播放

  3. 动画状态的事件响应处理

关键流程解析

  1. 能力激活与验证

    • 调用父类ActivateAbility方法完成基础激活

    • 通过K2_CommitAbility()验证能力有效性,失败则立即终止

  2. 动画播放控制

    • 权限检查:HasAuthorityOrPredictionKey确保只有拥有权限或预测键的客户端能播放

    • 任务创建:通过UAbilityTask_PlayMontageAndWait创建异步蒙太奇播放任务

    • 事件绑定:为动画的BlendOut/Cancelled/Completed/Interrupted四种状态绑定K2_EndAbility回调

  3. 异常处理机制

    • 所有异常状态都会触发能力终止

    • 通过动态代理实现灵活的事件响应

技术要点说明

  1. 预测性动画处理

    • 使用PredictionKey支持客户端预测动画

    • 网络同步时通过Authority检查确保一致性

  2. 任务生命周期管理

    • 蒙太奇任务与能力实例绑定

    • 任务就绪后调用ReadyForActivation()启动执行

  3. 设计模式应用

    • 观察者模式:通过事件回调处理动画状态

    • 策略模式:通过基类方法实现多态调用

优化建议

  1. 可添加蒙太奇播放前的资源检查

  2. 考虑添加动画播放进度回调

  3. 可扩展为支持多段连招的动画序列

3.创建蓝图连击能力:

修改玩家角色类的游戏能力:

4.创建动画蒙太奇

角色动画蓝图中,控制绑定之前,建立默认插槽

5.连击能力中,添加连击蒙太奇:

相关推荐
嵌入式小李.man18 小时前
C++第十三篇:继承
开发语言·c++
kyle~19 小时前
C++---嵌套类型(Nested Types)封装与泛型的基石
开发语言·c++·算法
胖咕噜的稞达鸭21 小时前
AVL树手撕,超详细图文详解
c语言·开发语言·数据结构·c++·算法·visual studio
CSCN新手听安21 小时前
【linux】多线程(六)生产者消费者模型,queue模拟阻塞队列的生产消费模型
linux·运维·服务器·c++
-SGlow-1 天前
Linux相关概念和易错知识点(48)(epoll的底层原理、epoll的工作模式、反应堆模式)
linux·服务器·c语言·网络·c++
心疼你的一切1 天前
Unity开发利器:ScriptableObject的数据容器设计与内存优化原理
microsoft·unity·c#·游戏引擎
csdn_aspnet1 天前
C++ 圆台体积和表面积计算程序(Program for Volume and Surface area of Frustum of Cone)
c++
至善迎风1 天前
将跨平台框架或游戏引擎开发的 Windows 应用上架 Microsoft Store
windows·microsoft·游戏引擎
worxfr1 天前
小游戏引擎架构设计案例分析
游戏引擎
我狸才不是赔钱货1 天前
AI大模型“战国策”:主流LLM平台简单介绍
c++·人工智能·程序人生·github·llama