UE4 碰撞【续】

一、碰撞输出

在代码中设置一个bool变量值,使其可以控制是否可以改变Actor,并且定义一个变量的方向向量FVector

	//移动方向
	UPROPERTY(EditInstanceOnly,BlueprintReadWrite, Category = "MyVars")
	FVector floatDirection = FVector(0.0, 0.0, 0.0);

	//是否启用方向移动
	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Category ="MyVars")
	bool bShouldUseDirection = false;

并且在Tick函数中,调用判断是否发生碰撞,把碰撞的位置结果以日志的方式输出来。

void ATestActor::Tick(float DeltaTime) {
	Super::Tick(DeltaTime);

	if (bShouldUseDirection) {
		FHitResult hitResult;
		AddActorLocalOffset(floatDirection, true, &hitResult);

		FVector hitLoction;
		hitLoction = hitResult.Location;
		UE_LOG(LogTemp, Warning, TEXT("X=%f,Y=%f,Z=%f"), hitLoction.X, hitLoction.Y, hitLoction.Z);
	}

}

函数AddActorLocalOffset(floatDirection, true, &hitResult);解析
第一个参数:floatDirection:表示移动的方向
第二个参数:true - 无论我们是否扫描到目标位置,触发过程都会重叠,如果被什么东西阻挡,则会在目标附近停止。仅扫描根零部件并检查其是否发生阻塞碰撞,子零部件移动时不进行扫描。如果禁用碰撞,则不会产生任何效果。false-不会检测碰撞
第三个参数:碰撞后的结果保存到第三个参数中
在这里插入图片描述

二、如何“穿墙而过”?

在场景中选中“墙”,在细节面板中【碰撞】-》【碰撞预设】-》【Custom】
在这里插入图片描述
可以看到世界类型为:WorldStatic
在这里插入图片描述

选中TestActor,查看他的对象类型:WorldDynamic
在这里插入图片描述

下面有两种方法实现“穿墙而过”;
第一种:勾选“墙”【碰撞预设】 -》【WorldDynamic】-》【忽略】,也就是让“墙”忽略WorldDynamic对象
在这里插入图片描述
第二种:勾选TestActor->【WorldStatic】->【忽略】,也就是让TestActor忽略WorldStatic类型的对象
在这里插入图片描述
aaa

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wb175208

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值