一种层次化设置物体碰撞器大小的方法与流程
本发明涉及虚拟现实拆解装配技术与碰撞检测技术领域,尤其涉及一种层次化设置物体碰撞器大小的方法。
背景技术:
unity3d作为虚拟现实开发引擎,已经广泛应用于游戏开发与机械设备的虚拟现实场景当中,特别是机械设备虚拟现实拆解装配技术,虚拟现实拆解装配技术通过射线检测与碰撞检测技术识别物体进行拖拽移动实现。
unity3d现有的盒型碰撞器采用obb包围盒,其特点是添加时根据物体的形状特点保持紧密的包围物体,当多个物体叠放与连接时,他们的碰撞器会存在重叠与交叉现象,此时执行碰撞检测很容易造成物体识别错误,另外,手动调整他们碰撞器的大小不够准确且费时费力。基于以上两种情况,因此需要一种在添加碰撞器时可以层次化设置碰撞器大小的方法。
技术实现要素:
针对上述产生的问题,本发明的目的在于提供一种层次化设置物体碰撞器大小的方法,解决了unity3d现有的碰撞器在添加时无法的进行层次化设置物体碰撞器大小,当多个物体叠放与连接时,他们的碰撞器会存在重叠与交叉现象,此时执行拆装碰撞检测很容易造成物体识别错误,另外,手动调整他们碰撞器的大小不够准确且费时费力的问题。
为实现上述目的,所述物体可以是unity3d中创建的三维物体,也可以是导入unity3d的三维模型子物体;
所述碰撞器为unity3d中的物理引擎,是unity3d中物体进行碰撞检测识别的必要物理条件;
所述发明所述一种层次化设置物体碰撞器大小的方法的具体步骤如下:
s1:设置一个公共变量作为进行碰撞器大小调整的固定值增量,使用时可以对该公共变量进行赋值;
s2:获取需要添加碰撞器的物体的大小,该大小为三元数,包含x,y,z轴方向的大小值,这里将需要添加碰撞器的物体称为主物体;
s3:执行重叠盒射线检测,重叠盒的中心为主物体的中心,重叠盒的长、宽、高分别为主物体在x,y,z轴方向上大小值的一半,重叠盒的角度与主物体角度一致,即重叠盒射线检测范围正好包围着主物体,通过重叠盒射线检测获取所有与主物体接触并且带有碰撞器的物体,这里将检测到的物体称为接触物体;
s4:判断是否检测到接触物体,如果没有则设置碰撞器大小与主物体大小一致,使碰撞器紧密包围主物体,碰撞器添加完成,如果检测到接触物体则进行主物体的碰撞器大小层次化调整;
s5:进行碰撞器大小层次化调整,获取所有接触物体的坐标位置,坐标位置为三元数,包含x,y,z轴方向的坐标值;
s6:将主物体x,y,z轴方向上的坐标值分别对应减去接触物体x,y,z轴方向上的坐标值,分别获得主物体与接触物体在x,y,z轴方向的相对位置差;
s7:将获得的所有相对位置差中最小的接触物体选定为参考物体,相对位置差越小说明主物体与接触物体接触越紧密,碰撞器之间重叠与交叉越严重,容易造成识别错误,需要进行层次调整;
s8:将获得的所有相对位置差中最小的坐标轴方向选定为需要调整碰撞器大小的坐标轴方向,该坐标轴方向称为调整坐标轴方向,如果获得的x,y,z轴的相对位置差均相等,说明存在与主物体大小一致且完全重叠的物体,此时x,y,z轴均为调整坐标轴方向;
s9:获取所有接触物体的碰撞器的大小,碰撞器的大小也为三元数,包含所有接触物体的碰撞器在x,y,z轴方向上的大小值;
s10:依据在s7中获得的参考物体与在s8中获得的调整坐标轴方向,将主物体碰撞器大小设置为参考物体在调整坐标轴方向的碰撞器的大小值加上固定值变量;
s11:为防止调整完成后出现与其他接触物体碰撞器大小一致的情况,调整后再次获取主物体在调整坐标轴方向上的碰撞器大小值;
s12:利用在s9中已经获得的所有接触物体在调整坐标轴方向上的碰撞器大小值分别减去调整后主物体在调整坐标轴方向上的碰撞器大小值;
s13:判断所获得的差值是否等于0,如果等于0,说明接触物体碰撞器调整后存在与主物体在该调整坐标轴方向上碰撞器大小一致的情况,此时主物体在该调整坐标轴方向上的碰撞器大小值继续加上固定值变量,返回s11继续执行,如果不等于0,说明层次化设置碰撞器大小完成。
附图说明
图1是本发明的一种层次化设置物体碰撞器大小的方法的流程图。
具体实施方式
为更进一步阐述本发明为达到预定目的所采取的技术手段及功效,以下结合附图及较佳实施例,对本发明进行详细说明如后。
本发明实施例提供一种层次化设置物体碰撞器大小的方法。与现有技术相比,该方法能够很好的解决unity3d现有的碰撞器在添加时无法的进行层次化设置物体碰撞器大小,当多个物体叠放与连接时,他们的碰撞器会存在重叠与交叉现象,此时执行拆装碰撞检测很容易造成物体识别错误,另外,手动调整他们碰撞器的大小不够准确且费时费力的问题。
所述物体可以是unity3d中创建的三维物体,也可以是导入unity3d的三维模型子物体;
所述碰撞器为unity3d中的物理引擎,是unity3d中物体进行碰撞检测识别的必要物理条件;
图1所示,所述一种层次化设置物体碰撞器大小的方法,实施步骤如下:
s1:设置一个公共变量作为进行碰撞器大小调整的固定值增量,使用时可以对该公共变量进行赋值;
s2:获取需要添加碰撞器的物体的大小,该大小为三元数,包含x,y,z轴方向的大小值,这里将需要添加碰撞器的物体称为主物体;
s3:执行重叠盒射线检测,重叠盒的中心为主物体的中心,重叠盒的长、宽、高分别为主物体在x,y,z轴方向上大小值的一半,重叠盒的角度与主物体角度一致,即重叠盒射线检测范围正好包围着主物体,通过重叠盒射线检测获取所有与主物体接触并且带有碰撞器的物体,这里将检测到的物体称为接触物体;
s4:判断是否检测到接触物体,如果没有则设置碰撞器大小与主物体大小一致,使碰撞器紧密包围主物体,碰撞器添加完成,如果检测到接触物体则进行主物体的碰撞器大小层次化调整;
s5:进行碰撞器大小层次化调整,获取所有接触物体的坐标位置,坐标位置为三元数,包含x,y,z轴方向的坐标值;
s6:将主物体x,y,z轴方向上的坐标值分别对应减去接触物体x,y,z轴方向上的坐标值,分别获得主物体与接触物体在x,y,z轴方向的相对位置差;
s7:将获得的所有相对位置差中最小的接触物体选定为参考物体,相对位置差越小说明主物体与接触物体接触越紧密,碰撞器之间重叠与交叉越严重,容易造成识别错误,需要进行层次调整;
s8:将获得的所有相对位置差中最小的坐标轴方向选定为需要调整碰撞器大小的坐标轴方向,该坐标轴方向称为调整坐标轴方向,如果获得的x,y,z轴的相对位置差均相等,说明存在与主物体大小一致且完全重叠的物体,此时x,y,z轴均为调整坐标轴方向;
s9:获取所有接触物体的碰撞器的大小,碰撞器的大小也为三元数,包含所有接触物体的碰撞器在x,y,z轴方向上的大小值;
s10:依据在s7中获得的参考物体与在s8中获得的调整坐标轴方向,将主物体碰撞器大小设置为参考物体在调整坐标轴方向的碰撞器的大小值加上固定值变量;
s11:为防止调整完成后出现与其他接触物体碰撞器大小一致的情况,调整后再次获取主物体在调整坐标轴方向上的碰撞器大小值;
s12:利用在s9中已经获得的所有接触物体在调整坐标轴方向上的碰撞器大小值分别减去调整后主物体在调整坐标轴方向上的碰撞器大小值;
s13:判断所获得的差值是否等于0,如果等于0,说明接触物体碰撞器调整后存在与主物体在该调整坐标轴方向上碰撞器大小一致的情况,此时主物体在该调整坐标轴方向上的碰撞器大小值继续加上固定值变量,返回s11继续执行,如果不等于0,说明层次化设置碰撞器大小完成。
该方法的使用流程如下:
在unity3d中针对叠放的物体,当给第一个物体添加碰撞器时,当与其接触的其他物体均没有碰撞器,此时,按照第一个物体自身大小设置碰撞器的大小,使碰撞器紧密包围物体,当给与第二个零部件添加碰撞器时会自动执行层次化设置物体碰撞器大小的方法,从而保证第一与第二零部件的碰撞器大小的层次分明,当给第三个零部件添加碰撞器时会考虑第一与第二个零部件碰撞器的大小,执行层次化设置物体碰撞器大小的方法,保证了层次分明,互不干扰,依次类推,直到所有零部件均添加上碰撞器,实现碰撞器层次化。
最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,本领域技术人员应理解,此处所描述的碰撞器、碰撞检测与虚拟现实拆解装配是示例性而非限定性的,本方法原理适用于现存以及将来可能存在的其他的碰撞器、碰撞检测与虚拟现实拆解装配而不背离本发明的精神和范围,并以引用的方式包含于此。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
起点商标作为专业知识产权交易平台,可以帮助大家解决很多问题,如果大家想要了解更多知产交易信息请点击 【在线咨询】或添加微信 【19522093243】与客服一对一沟通,为大家解决相关问题。
此文章来源于网络,如有侵权,请联系删除