一种基于三维引擎的实时障碍检测及被动躲避方法技术

技术编号:37791306 阅读:14 留言:0更新日期:2023-06-09 09:21
本发明专利技术涉及三维场景中的障碍物检测领域,具体是一种基于三维引擎的实时障碍检测及被动躲避方法,其特征在于,包括以下步骤:S1、将三维场景内的障碍物进行Tag值标记;S2、在被控物体模型外围套一层碰撞,关闭其碰撞属性,保留其检测属性;S3、设定被控物体模型尺寸、碰撞蒙皮数值、被控物体模型行进速度、检测距离、检测频率、躲避范围和紧急躲避范围;S4、系统将基于S3所设定的参数,对场景内的障碍物进行实时检测,以及根据检测结果操控物体模型进行躲避。本发明专利技术实现了物体模型在行进过程中对障碍物的精准躲避,提高画面仿真程度,无过多性能消耗。消耗。消耗。

【技术实现步骤摘要】
一种基于三维引擎的实时障碍检测及被动躲避方法


[0001]本专利技术涉及三维场景中的障碍物检测领域,具体是一种根据实时周围地形高效被动躲避障碍物的方法。

技术介绍

[0002]在进行手动操控场景漫游时,第一人称、第三人称在遇到障碍物时,需手动进行镜头移动或位置移动,无法被动的对障碍物实现躲避。在一些游戏软件、漫游软件中均大量需要运用到此类技术。
[0003]现有技术中,一种常规的解决方法是采用增加人物蒙皮厚度或者对障碍物进行圆滑碰撞处理,从而避免人物在前进时因障碍物而造成行进停顿问题;另一种方法是利用算法程序,通过计算出发点与目的地的距离,找到最优解路线,同时剔除最优解路线内的障碍物,通过提前规划路线来进行障碍物的躲避。
[0004]以上两种现有技术的做法,前者采用物理端的硬挤碰撞使被控物体从障碍物一侧弹开,从而达到规避目的,但物体尺寸过大时,蒙皮容易造成漫游或游戏中的体验感下降,使物体始终与墙壁、指示牌等产生一段距离,无法近距离靠近,从而造成躲避动作卡顿失真,让用户缺失体验感。后者采用预设路线算法躲避障碍物仅限于自动寻路中使用,途中使用者一旦改变方向则需要重新规划路线,不仅影响效率,而且在遇到较为复杂的地形时,路线预设与障碍物标记将变得更加消耗性能,不利于软件的运行速率。

技术实现思路

[0005]本专利技术旨在提出一种基于三维引擎的实时障碍检测及被动躲避方法,以解决现有技术无法被动躲避障碍以及运行速率低、消耗性能大的问题。
[0006]为了实现上述专利技术目的,本专利技术采取如下技术方案:一种基于三维引擎的实时障碍检测及被动躲避方法,其特殊之处在于,包括以下步骤:S1、将三维场景内的障碍物进行Tag值标记;S2、在被控物体模型外围套一层碰撞,关闭其碰撞属性,保留其检测属性;S3、设定被控物体模型尺寸、碰撞蒙皮数值、被控物体模型行进速度、检测距离、检测频率、躲避范围和紧急躲避范围;S4、系统将基于S3所设定的参数,对场景内标记的障碍物进行实时检测,以及根据检测结果操控物体模型进行躲避。
[0007]在一种可选的实现方式中,所述S2的具体方法是:通过Editor编辑器调用增加组件的方法AddComponent在人物模型的外围生成碰撞体BoxCollider,通过设置触发器属性isTrigger保留碰撞体BoxCollider的检测属性同时关闭其碰撞属性。
[0008]在一种可选的实现方式中,所述S3的躲避范围被设定为被控物体模型的外层碰撞向外的预定半径范围。
[0009]在一种可选的实现方式中,所述S3的紧急躲避范围被设定为外层碰撞向内与被控物体模型之间的半径范围。
[0010]在一种可选的实现方式中,所述S4对场景内标记的障碍物进行实时检测,包括以下检测方法:S41、沿被控物体模型的行进方向发射一条射线,所述射线基于S3所设定的检测频率和检测距离进行障碍物检测:若射线未检测到障碍物,则根据设定的检测频率再次进行检测;若射线检测到前方有障碍物,则根据射线检测的返回值计算出当前障碍物与被控物体模型之间的距离L,当距离L超出S3设定的躲避范围,则无需执行强制位移躲避,持续进行检测;当距离L落入S3设定的躲避范围,则执行S42,进行强制位移躲避;具体的,所述障碍物检测的具体判断逻辑通过以下条件判断函数,即可返回在最大检测长度MaxL范围内正前方标记Tag为Obstacle的障碍物A:if (Physics.Raycast(ray, out hitInfo, MaxL, 1)){Transform A = hitInfo.collider.transform;}其中MaxL为S3中设定的射线的最大检测长度, 1代表S1中设定的Tag值的下标。
[0011]具体的,所述距离L与所述躲避范围MinL之间的比较计算方法如下:float L =(A.position

P.position).sqrMagnitude;当距离L未到达躲避范围MinL时,根据设定频率Rate,进行检测并判断是否应该执行强制位移,直到距离L落入躲避范围MinL或恰好等于躲避范围MinL时,则执行L<= MinL ? 位移检测方法:距离检测方法进行强制位移。
[0012]在一种可选的实现方式中,所述S4中对场景内的障碍物进行实时检测,还包括一种应急检测方法:当检测到被控物体模型靠近障碍物的速度超出S3设定的检测频率,且障碍物进入S3设定的紧急躲避范围时,执行S42进行紧急位移躲避,避免因射线检测频率间隔过久造成障碍物漏检。
[0013]首先调整设定紧急检测距离,同时利用碰撞体触发检测方法OnTriggerEnter进行实时自检,该方法提供检测所有进入该触发器的物体信息并返回进入触发器的物体,此处将物体设定为Obj,并运用以下公式进行紧急避让检测:Obj.tag.Equals("Obstacle") ? 位移检测方法 : null 。
[0014]在一种可选的实现方式中,所述S4操控物体模型进行躲避,包括以下步骤:S42、控制物体模型停止向障碍物靠近,沿被控物体模型的左右两侧各发出一条无限长射线,对当前被控物体模型左右两侧夹道进行障碍检测,对检测结果进行判断,选择行进方向。
[0015]在进行转向操作时,向两侧夹道发射射线,并通过系统自带的平滑转向功能实现转向:Rotate(Vector3.up * Time.deltaTime *
ꢀ‑
Speed_rot);具体检测公式为:LeftLength>= RightLength ? Rotate(Vector3.up * Time.deltaTime *
ꢀ‑
行进
速度) : Rotate(Vector3.up * Time.deltaTime* 行进速度);其中,LeftObj和RightObj分别表示左右两侧夹道,LeftLength和RightLength分别表示通过计算过两侧夹道与人物之间的直线距离。
[0016]在一种可选的实现方式中,在物体模型停止或转向过程中,重复执行S41。
[0017]在一种可选的实现方式中,对于已侦测过的障碍物将实现记录,对于已经运行记录过的被躲避的障碍物,再重新漫游至此被检测到时将直接跳过S42,采用此前的运行记录进行躲避,以节约性能消耗。
[0018]本专利技术的方法与现有技术相比,有益效果在于:1、避免了现有技术对障碍物进行碰撞圆滑处理所带来的被控物体始终与墙壁、指示牌等产生一段距离,无法近距离靠近而产生的画面卡顿失真问题,本专利技术结合射线检测及套层碰撞的检测功能使得障碍物的阻挡面积能够完美实现,且能让物体模型在行进时实现精准躲避。
[0019]2、避免了现有技术根据预设路线对障碍物提前规避产生的性能消耗及运行速率不佳的问题,使得物体模型能够根据自主选择的路线进行被动躲避,无需实时重新规划路线,也无过多性能消耗,提升了运行速率。
[0020]3、设有紧急避障功能,在因设置检测间隔过长、移本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于三维引擎的实时障碍检测及被动躲避方法,其特征在于,包括以下步骤:S1、将三维场景内的障碍物进行Tag值标记;S2、在被控物体模型外围套一层碰撞,关闭其碰撞属性,保留其检测属性;S3、设定被控物体模型尺寸、碰撞蒙皮数值、被控物体模型行进速度、检测距离、检测频率、躲避范围和紧急躲避范围;S4、系统将基于S3所设定的参数,对场景内标记的障碍物进行实时检测,以及根据检测结果操控物体模型进行躲避。2.如权利要求1所述的一种基于三维引擎的实时障碍检测及被动躲避方法,其特征在于,所述S2的具体方法是:通过Editor编辑器调用增加组件的方法AddComponent在人物模型的外围生成碰撞体BoxCollider,通过设置触发器属性isTrigger保留碰撞体BoxCollider的检测属性同时关闭其碰撞属性。3.如权利要求1所述的一种基于三维引擎的实时障碍检测及被动躲避方法,其特征在于,所述S3的躲避范围被设定为被控物体模型的外层碰撞向外的预定半径范围;所述S3的紧急躲避范围被设定为外层碰撞向内与被控物体模型之间的半径范围。4.如权利要求1所述的一种基于三维引擎的实时障碍检测及被动躲避方法,其特征在于,所述S4对场景内标记的障碍物进行实时检测,包括以下检测方法:S41、沿被控物体模型的行进方向发射一条射线,所述射线基于S3所设定的检测频率和检测距离进行障碍物检测:若射线未检测到障碍物,则根据设定的检测频率再次进行检测;若射线检测到前方有障碍物,则根据射线检测的返回值计算出当前障碍物与被控物体模型之间的距离L,当距离L超出S3设定的躲避范围,则无需执行强制位移躲避,持续进行检测;当距离L落入S3设定的躲避范围,则执行S42,进行强制位移躲避。5.如权利要求4所述的一种基于三维引擎的实时障碍检测及被动躲避方法,其特征在于,所述障碍物检测的具体判断逻辑通过以下条件判断函数,即可返回在最大检测长度MaxL范围内正前方标记Tag为Obstacle的障碍物A:if (Physics.Raycast(ray, out hitInfo, MaxL, 1)){Transform A = hitInfo.collider.transform;}其中MaxL为S3中设定的射线的最大检测长度, 1代表S1中设定的Tag值的下标;所述距离L与所述躲避范围MinL之间的比较计算方法如下:float L =(A.position

【专利技术属性】
技术研发人员:杨斌张志伟王伟康姜家祺
申请(专利权)人:山东捷瑞数字科技股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1