UE4碰撞射线检测2

这篇具有很好参考价值的文章主要介绍了UE4碰撞射线检测2。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  1. UE4内置的函数:UWorld::LineTraceSingleByChannel
    该线轨迹将光线射入空间,并根据选定的轨迹通道进行碰撞
void AFirstPawn::lineTraceSingleByChannel() {
	FHitResult HitResult;
	FVector Start = GetActorLocation() /*+ FVector(0.f, 0.f, 75.f)*/;
	FVector End = Start + GetActorForwardVector() * 500.f;
	FCollisionQueryParams CollisionQueryParams;
	CollisionQueryParams.AddIgnoredActor(this);
	GetWorld()->LineTraceSingleByChannel(HitResult, Start, End, ECollisionChannel::ECC_Visibility, CollisionQueryParams);
	if (HitResult.bBlockingHit) {
		//DrawDebugSphere(GetWorld(), HitResult.Location, 15.f, 12, FColor::Red, false, 5.f);
		//DrawDebugLine(GetWorld(), Start, HitResult.Location, FColor::Red, true, 3.f);
		DrawDebugPoint(GetWorld(), HitResult.Location, 5.f, FColor::Blue, false, 5.f);
	}
}

最后一个参数:FCollisionQueryParams的对象作为可选参数,该参数可以指定有关冲突查询的详细信息,例如要忽略的参与者.
我们在场景中摆放三个立方体
第一个立方体设置【碰撞】->【碰撞预设】->【碰撞相应】->【Visibility】->【阻挡】
第二个立方体设置【碰撞】->【碰撞预设】->【碰撞相应】->【Visibility】->【重叠】
第三个立方体设置【碰撞】->【碰撞预设】->【碰撞相应】->【Visibility】->【忽略】
UE4碰撞射线检测2
可以看到只有第一个设置【Visibility】->【阻挡】发生了作用
2. UWorld::LineTraceMultiByChannel

void AFirstPawn::lineTraceMultiByChannel() {
	FHitResult HitResult;
	FVector Start = GetActorLocation() /*+ FVector(0.f, 0.f, 75.f)*/;
	FVector End = Start + GetActorForwardVector() * 1000.f;
	FCollisionQueryParams CollisionQueryParams;
	CollisionQueryParams.AddIgnoredActor(this);
	TArray<FHitResult> HitResults;
	GetWorld()->LineTraceMultiByChannel(HitResults, Start, End,	ECollisionChannel::ECC_Visibility); 
	for (int32 i = 0; i < HitResults.Num(); i++) {
		if (HitResults[i].bBlockingHit) {
			FString ActorName = HitResults[i].Actor->GetName();
			printf_k(i, "%d Actor Name: %s", i, *ActorName);
		} else {
			//printf_k(i, "%d Failed hit!", i);
			FString ActorName = HitResults[i].Actor->GetName();
			printf_k(i, "%d Failed hit: %s", i, *ActorName);
		}
	}
}

放置是三个立方体,从前往后设置参数:
第一个立方体设置【碰撞】->【碰撞预设】->【碰撞相应】->【Visibility】->【忽略】
第二个立方体设置【碰撞】->【碰撞预设】->【碰撞相应】->【Visibility】->【重叠】
第三个立方体设置【碰撞】->【碰撞预设】->【碰撞相应】->【Visibility】->【阻挡】
UE4碰撞射线检测2
第一个立方体直接被忽略掉,第二个立方体检测到重叠但是没有检测到碰撞,第三个检测到了碰撞
3.UKismetSystemLibrary::BoxTraceSingleForObjects

/**
* ObjectTypeQuery1 : World Static
* ObjectTypeQuery2 : World Dynamic
* ObjectTypeQuery3 : Pawn
* ObjectTypeQuery4 : Physics Body
* ObjectTypeQuery5 : Destructible
* ObjectTypeQuery6 : First Custom Object Type
* ObjectTypeQuery7 : Second Custom Object Type
*/

void AFirstPawn::boxTraceSingleForObjects() {
	FHitResult HitResult;
	FVector Start = GetActorLocation() /*+ FVector(0.f, 0.f, 75.f)*/;
	FVector End = Start + GetActorForwardVector() * 1000.f;
	FCollisionQueryParams CollisionQueryParams;
	CollisionQueryParams.AddIgnoredActor(this);
	TArray<TEnumAsByte<EObjectTypeQuery>> ObjectTypes;
	ObjectTypes.Add(EObjectTypeQuery::ObjectTypeQuery2);
	TArray<AActor*> ActorsToIgnore;
	ActorsToIgnore.Add(this);
	FHitResult BoxTraceResult;

	UKismetSystemLibrary::BoxTraceSingleForObjects(
		GetWorld()//UWorld对象
		, Start   //跟踪的起始位置                        
		, End     //是跟踪的结束位置
		, FVector(32.f, 32.f, 32.f) //跟踪盒子一半的大小
		, FRotator() //跟踪盒子旋转方向
		, ObjectTypes//是对象类型数组
		, true //是否对复杂的几何图形进行跟踪
		, ActorsToIgnore//要忽略数组的参与者

		/**
		* ForOneFrame:来绘制单个帧的跟踪
		* ForDuration:使跟踪能够持续指定的时间
		* None:示不绘制任何调试形状
		* Persistent:表示调试形状将在世界中持续存在
		*/
		, EDrawDebugTrace::ForDuration
		, BoxTraceResult //碰撞的结果
		, true
		, FColor::Red //跟踪颜色,它将用于绘制方框
		, FColor::Blue//是跟踪命中颜色,用于显示命中的点
	);
	if (BoxTraceResult.bBlockingHit) {
		print_k(1, "Blocking Hit!");
	}

}

UE4碰撞射线检测2

aaa文章来源地址https://www.toymoban.com/news/detail-460742.html

到了这里,关于UE4碰撞射线检测2的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • UE4动作游戏实例RPG Action解析三:实现效果,三连击Combo,射线检测,显示血条,火球术

    实现武器三连击,要求: 1.下一段Combo可以随机选择, 2.在一定的时机才能再次检测输入 3. 等当前片段播放完才播放下一片段 1.1、蒙太奇设置 通过右键-新建蒙太奇片段,在蒙太奇里创建三个片段,并且移除相关连接,这样默认只会播放第一个片段 不同片段播放动画从 资产

    2024年02月21日
    浏览(55)
  • unity中的射线碰撞检测

    在Unity中,射线碰撞检测是一种常用的技术,通常用于确定射线与场景中的物体是否相交,并获取相交点的信息。 1.创建射线: 使用 Ray 类或 RaycastHit 结构体创建射线。 Ray 表示射线的起点和方向,而 RaycastHit 用于存储射线与物体相交的信息,如相交点、法线等。 2.发射射线:

    2024年03月17日
    浏览(42)
  • Unity 射线与碰撞范围检测【踩坑记录】

    射线检测在2D和3D的区别比较大 一定要加上对应的Collider组件 对应的函数只检测对应的Collider, Physics.Raycast 是不会检测到Collider 2D的(这个让我有一次debug了好久才发现) 对应API如下 可以使用 Debug.DrawLine(Vector3 origin,Vector3 destination,Color color) 和 Debug.DrawRay(Vector3 origin,Vector3 dir

    2023年04月08日
    浏览(39)
  • UE4 设置碰撞体

    效果: 设置碰撞前:  设置碰撞后: 步骤: 1.点击需要设置为碰撞体的物体(门)  2.在右侧细节面板中双击静态网格体 3.在新出现的面板中,选择 碰撞复杂度 为 将复杂碰撞设置为简单碰撞  或: 在菜单栏的碰撞中选择添加盒体简化碰撞  4.关闭该界面,运行游戏,就可以

    2024年02月13日
    浏览(51)
  • Stanford UE4 & UE5 C++ 开发 课程笔记(三)子弹物理碰撞与弹道校正

    Unreal中两个物体碰撞需要两方预设的碰撞通道中对方对应的类型都设置为 Block 。 在场景中设置一个cube,并将其进行适当拉伸: 选中放置好的cube,在 Collision 中将 Collision Presets 设为 Custom ,并将每一项置为 Block : 注意cube的默认类型是 WorldStatic 。 在 Project Setting - Engine - Co

    2024年02月15日
    浏览(60)
  • UE4/UE5 虚幻引擎,Pawn的碰撞,怎么防止Pawn移动的时候穿透物体。

    前言:在UE项目开发中,有些我们需要自己新建一个Pawn来控制视角,但是如果我们没有设置Pawn的碰撞,那么Pawn在移动的过程中,很容易穿到Actor里面。而有的时候我们并不需要Pawn穿过物体,就必须要给Pawn增加碰撞。 1、新建一个Pawn类。 2、 添加FloatingPawnMovement(必须添加这

    2023年04月12日
    浏览(75)
  • UE5 C++(十七)— 射线检测

    射线检测简单来说就是通过相机发射一条射线,用来检测对象的一种检测机制。 官网介绍:使用射线进行命中判定 这里主要介绍4种常用的射线检测方式。 关键API: LineTraceSingleByChannel 声明变量 MyCharacter.h 在Tick中实现通道进行射线检测 MyCharacter.cpp 编译 之后,在场景中添加

    2024年01月18日
    浏览(94)
  • ue4 无效模拟选项:形体被设置为模拟物理,但启用碰撞不兼容

    可能是由于勾选模拟物理后,但是碰撞未启用: 碰撞预设可选第一个选项,碰撞已启用勾选已启用碰撞

    2024年02月15日
    浏览(44)
  • UE4蓝图之函数、事件、宏的区别

    语法区别 执行引脚的区别: 函数允许有一个执行引脚和一个输出引脚 事件只允许有一个执行引脚 宏允许有多个执行引脚和读个输出引脚 返回值 函数和宏允许有返回值,而事件没有返回值 需要注意的是: 函数可以有返回值也可以没有,如果我们不给函数设置任何返回值时

    2023年04月18日
    浏览(45)
  • unity碰撞检测的几种函数

    OnCollisionEnter(Collision collision):这个函数用于检测两个物体之间的碰撞事件,当两个物体发生碰撞时被调用。其中,参数collision包含了碰撞的详细信息,例如碰撞点、碰撞法线等等。 OnCollisionStay(Collision collision):这个函数用于检测两个物体之间的持续碰撞事件,当两个物体持

    2024年02月04日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包