UE4-碰撞检测SweepMultiByChannel-如何保证玩家被怪物单次攻击不受多次伤害

在怪物攻击玩家时,我们需要保证怪物在一次攻击时,只会产生一次有效伤害,所以这里需要用SweepMultiByChannel函数进行碰撞检测,如何进行一次的伤害而不是多次伤害呢?我定义了一个

AActor* HitActor=0;

用来辅助判断是否已经进行了攻击,如果已经获取了对应的玩家碰撞,就不再二次玩家的伤害。

FVector AttLoc = GetMesh()->GetSocketLocation(TEXT("MM-R-Hand"));
	
	TArray<FHitResult> Hits;
	FCollisionShape Shape;
	Shape.ShapeType = ECollisionShape::Sphere;
	Shape.Sphere.Radius = 30;

	FCollisionQueryParams QP;
	QP.AddIgnoredActor(this);//添加忽略的Actor,  是一个TArray的链表,可以添加多个元素进去
	

	AActor* HitActor=0;

	if (GetWorld()->SweepMultiByChannel(Hits, AttLoc, AttLoc, FQuat(0, 0, 0, 0), ECC_Camera, Shape, QP))
	{
		
		for (FHitResult Hit : Hits)
		{
			
			if (Hit.GetActor())
			{
				if (Hit.GetActor() != HitActor)
				{
					UE_LOG(LogTemp, Log, TEXT("Hit Name is %s"), *Hit.GetActor()->GetName());
					HitActor = Hit.GetActor();
				}
			}
			
		}
	}

SweepMultiByChannel(Hits, AttLoc, AttLoc, FQuat(0, 0, 0, 0), ECC_Camera, Shape, QP)

参数含义:

Hits表示碰撞到的元素,存放在TArray中

AttLoc:第一个表示开始位置

AttLoc:第二个表示结束位置

FQuat(0,0,0,0):表示转4元数

ECC_Camera:表示碰撞方式

QP:表示判断询问参数,使用AddIgnoredActor()函数,忽略不需要判断的Actor

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值