UE4-GameplayAbilities 官方demo ActionRpg 技能释放流程分析

官方demo ActionRpg 技能释放分析

      • 整体流程
      • 如何触发技能伤害

ActionRpg https://docs.unrealengine.com/zh-CN/Resources/SampleGames/ARPG/index.html

整体流程

UE4-GameplayAbilities 官方demo ActionRpg 技能释放流程分析_第1张图片

分析

  1. 主角技能释放的入口肯定是输入引发的,所以查看 BP_PlayerCharacter 中的输入处理,我们重点考察玩家普通攻击
    UE4-GameplayAbilities 官方demo ActionRpg 技能释放流程分析_第2张图片
  2. 接下来 会通过UAbilitySystemComponent激活玩家对应的技能
bool ARPGCharacterBase::ActivateAbilitiesWithItemSlot(FRPGItemSlot ItemSlot, bool bAllowRemoteActivation)
{
     
	FGameplayAbilitySpecHandle* FoundHandle = SlottedAbilities.Find(ItemSlot);

	if (FoundHandle && AbilitySystemComponent)
	{
     
		return AbilitySystemComponent->TryActivateAbility(*FoundHandle, bAllowRemoteActivation);
	}

	return false;
}
  1. 然后会找到具体的技能实例 UGameplayAbility 激活技能。激活过程中会触发ActivateAbility / K2_ActivateAbility 事件回调。回调由具体子类复写,以处理具体的技能表现逻辑。在复写的函数中 应该调用 CommitAbilityEndAbility
  • CommitAbility
    • 检查这个技能的释放条件,比如蓝够不够,是不是还在CD中
    • 如果通过判断,则 扣除消耗(蓝量)、应用CD 等
bool UGameplayAbility::CommitAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo)
{
	// 检查
	if (!CommitCheck(Handle, ActorInfo, ActivationInfo))
	{
		return false;
	}
	
	// 扣除消耗  CD  
	CommitExecute(Handle, ActorInfo, ActivationInfo);
	
	//Call BP Event 
	K2_CommitExecute();

	// Broadcast this commitment
	ActorInfo->AbilitySystemComponent->NotifyAbilityCommit(this);

	return true;
}
  • EndAbility 技能释放完毕

UE4-GameplayAbilities 官方demo ActionRpg 技能释放流程分析_第3张图片

如何触发技能伤害

UE4-GameplayAbilities 官方demo ActionRpg 技能释放流程分析_第4张图片
分析
在施放技能时,向AbilityComponent 中注册事件,当达到某个可以结算技能效果的时机,触发该事件。

你可能感兴趣的:(UE4成长笔记,c++,unreal,技能系统)