Unreal Engine 4 —— GAS系统学习 (三十五)群体技能GroundBlast(3)

欢迎大家加入Unreal Engine C++ & Blueprint群一起交流:1143575617

这一节我们将技能范围内检测到的敌人数据进行打包发送出去。

这里的发送是需要用到代理的:FGameplayAbilityTargetDataHandle类。

需要用到的父类属性有两个,一个是StartLocation,即技能起始位置。还有一个是TargetDataReadyDelegate,它是FAbilityTargetData的对象,包含有Broadcast方法,这是我们需要用到的。

在ComfirmTargetingAndContinue方法中加上以下代码(有重复的忽略):

void AGATargetActor::ConfirmTargetingAndContinue(){
	
	FVector lookAt;
	
	bool tryTrace =  GetLookAtLocation(lookAt);

	FCollisionQueryParams collisionQueryParams;
	AShibiCharacter* shinbi = Cast<AShibiCharacter>(GetWorld()->GetFirstPlayerController()->GetPawn());
	collisionQueryParams.bTraceComplex = false;
	collisionQueryParams.bReturnPhysicalMaterial = false;

	if (MasterPC) {
		collisionQueryParams.AddIgnoredActor(shinbi->GetUniqueID());
	}
	
	TArray<FOverlapResult> overlaps;
	TArray<TWeakObjectPtr<AActor>> overlapedActors;


	bool rangeDetect = GetWorld()->OverlapMultiByObjectType(overlaps,lookAt,FQuat::Identity, FCollisionObjectQueryParams(ECC_Pawn),FCollisionShape::MakeSphere(Radius), collisionQueryParams);

	if (rangeDetect) {
		for (int i = 0; i < overlaps.Num();i++) {
			APawn* pawnEnemy = Cast<APawn>(overlaps[i].GetActor());
			if (pawnEnemy && !overlapedActors.Contains(pawnEnemy)) {
				overlapedActors.Add(pawnEnemy);
			}
		}
		
	
	}
	
	if (overlapedActors.Num() > 0) {
		FGameplayAbilityTargetDataHandle TargetDataHandle = StartLocation.MakeTargetDataHandleFromActors(overlapedActors);
		TargetDataReadyDelegate.Broadcast(TargetDataHandle);
	}
	else {
		TargetDataReadyDelegate.Broadcast(FGameplayAbilityTargetDataHandle());
	}
	
}

最重要的就是最后一组if...else....,我们将数组里的敌人对象全部送到StartLocation中,通过代理来将这些数据广播出去。

接下来我们需要画一些DebugSphere,来看清楚我们的技能释放的位置。

重写父类的    virtual void Tick(float DeltaSeconds) override;方法。

	virtual void Tick(float DeltaSeconds) override;

 


void AGATargetActor::Tick(float DeltaSeconds)
{
	Super::Tick(DeltaSeconds);
	FVector lookAt;
	GetLookAtLocation(lookAt);
	DrawDebugSphere(GetWorld(), lookAt, Radius, 1, FColor::Red, true, 5, 0, 2.0f);
}

编译程序,创建蓝图。

进入主角蓝图,创建激活GroundBlast技能。

打开GroundBlast技能蓝图,将Comfirmination 改为 用户确认,这里很好理解,你不会对着没有敌人的地方放技能。

 未完。

本节无图例。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值