发布日期:2024-09-01 浏览次数:次
本发明涉及计算机,具体而言,涉及一种角色站立位置的调整方法及装置、存储介质、电子装置。背景技术:1、相关技术中,3d游戏中,角色在移动和站立状态下通常需要与场景中的物体进行碰撞检测以保证模型位置的正确性,同时精确的碰撞结果可以用于角色的ik(inversekinematic,反向动力学)系统,然而采用不同的碰撞检测方法对游戏的性能和表现效果存在不同的影响。2、对于传统3d游戏,基于软硬件条件限制,可能并没有ik等复杂的动画表现需求,对于碰撞系统的精确性要求也并不高;而现代游戏需要依赖精确碰撞检测结果的系统越来越多,如何选择高效的碰撞方案与游戏性能有直接关系。而处理角色移动过程中碰撞问题的常规方法是使用角色的包围盒或胶囊体与场景中物体的凸多面体进行求交检测,实现碰撞检测。3、相关技术中,以当下主流的商业引擎unity3d及ue4为例,商业引擎在面向用户时需要考虑引擎的通用性,所以3d商业游戏引擎通常会变成一个重量级的工具,然而实际上一款游戏通常并不会用到引擎中的所有功能。以碰撞系统为例,ue4中直接引入了physx物理引擎作为复杂碰撞检测的工具,而实际上碰撞系统的实现仅依赖physx sdk诸多库中的pxfoundation及physxcommon两个即可,但用户无法选择只依赖这两个库,因为引擎中的其它模块还要依赖physx sdk其它库中的功能,这对于引擎来说是一项基本功能,但对于很多不需要物理的游戏来说就显得比较重量级。同时如果引入物理引擎,意味着需要将模型的顶点结构等转换为physx能够识别的数据结构,增加了系统的复杂度和反应速度。4、针对相关技术中存在的上述问题,目前尚未发现有效的解决方案。技术实现思路1、本发明实施例提供了一种角色站立位置的调整方法及装置、存储介质、电子装置。2、根据本发明的一个实施例,提供了一种角色站立位置的调整方法,包括:确定目标角色在游戏场景中的运动状态;若所述目标角色在游戏场景中的运动状态为站立状态,获取场景物体的模型数据;采用所述模型数据对所述目标角色和所述场景物体进行碰撞检测,得到碰撞位置;基于所述碰撞位置调整所述目标角色在所述场景物体上的站立位置。3、可选的,获取场景物体的模型数据包括:从所述场景物体的物体模型对应的顶点缓冲区读取三角面片;从所述物体模型对应的索引缓冲区查找所述三角面片的顶点位置数据,并将所述顶点位置数据确定为所述模型数据。4、可选的,所述模型数据为顶点位置数据,采用所述模型数据对所述目标角色和所述场景物体进行碰撞检测,得到碰撞位置包括:定位所述目标角色的骨骼模型的关节链末端的足部骨骼;以所述足部骨骼为起点位置向所述场景物体发射第一射线;在所述顶点位置数据中查找与所述第一射线相交的所述场景物体的三角面片;将所述三角面片的面片位置确定为所述碰撞位置。5、可选的,在将所述三角面片的面片位置确定为所述碰撞位置之后,所述方法还包括:检测所述足部骨骼上是否存在穿戴物;若所述足部骨骼上存在穿戴物,计算所述穿戴物的附加高度;将所述面片位置上移所述附加高度,并采用上移后的面片位置更新所述碰撞位置。6、可选的,在定位所述目标角色的骨骼模型的关节链末端的足部骨骼之后,所述方法还包括:从所述足部骨骼所在的包围盒向下发射第二射线;通过所述第二射线检测预设范围内是否存在与所述足部骨骼相交的凸多面体;若存在与所述足部骨骼相交的凸多面体,则以所述足部骨骼为起点位置向所述场景物体发射第一射线。7、可选的,基于所述碰撞位置调整所述目标角色在所述场景物体的站立位置包括:定位所述目标角色的骨骼模型的关节链末端的足部骨骼;采用所述碰撞位置更新所述足部骨骼在所述场景物体的站立位置;获取所述骨骼模型的关节树结构,基于所述站立位置和所述关节树结构更新所述足部骨骼的关联骨骼的骨骼位置,其中,所述关节树结构用于表征所述骨骼模型中各级关节之间的约束关系。8、可选的,所述方法还包括:若所述目标角色在游戏场景中的运动状态为站立状态,将所述目标角色的反向动力学引擎调整为开启状态。9、根据本发明的另一个实施例,提供了一种角色站立位置的调整装置,包括:确定模块,用于确定目标角色在游戏场景中的运动状态;获取模块,用于若所述目标角色在游戏场景中的运动状态为站立状态,获取场景物体的模型数据;检测模块,用于采用所述模型数据对所述目标角色和所述场景物体进行碰撞检测,得到碰撞位置;调整模块,用于基于所述碰撞位置调整所述目标角色在所述场景物体上的站立位置。10、可选的,所述获取模块包括:读取单元,用于从所述场景物体的物体模型对应的顶点缓冲区读取三角面片;查找单元,用于从所述物体模型对应的索引缓冲区查找所述三角面片的顶点位置数据,并将所述顶点位置数据确定为所述模型数据。11、可选的,所述模型数据为顶点位置数据,所述检测模块包括:定位单元,用于定位所述目标角色的骨骼模型的关节链末端的足部骨骼;第一发射单元,用于以所述足部骨骼为起点位置向所述场景物体发射第一射线;查找单元,用于在所述顶点位置数据中查找与所述第一射线相交的所述场景物体的三角面片;第一确定单元,用于将所述三角面片的面片位置确定为所述碰撞位置。12、可选的,所述检测模块还包括:第一检测单元,用于在所述确定单元将所述三角面片的面片位置确定为所述碰撞位置之后,检测所述足部骨骼上是否存在穿戴物;计算单元,用于若所述足部骨骼上存在穿戴物,计算所述穿戴物的附加高度;更新单元,用于将所述面片位置上移所述附加高度,并采用上移后的面片位置更新所述碰撞位置。13、可选的,所述检测模块还包括:第一发射单元,用于在所述定位单元定位所述目标角色的骨骼模型的关节链末端的足部骨骼之后,从所述足部骨骼所在的包围盒向下发射第二射线;第二检测单元,用于通过所述第二射线检测预设范围内是否存在与所述足部骨骼相交的凸多面体;第二确定单元,用于若存在与所述足部骨骼相交的凸多面体,则以所述足部骨骼为起点位置向所述场景物体发射第一射线。14、可选的,所述调整模块包括:定位单元,用于定位所述目标角色的骨骼模型的关节链末端的足部骨骼;第一更新单元,用于采用所述碰撞位置更新所述足部骨骼在所述场景物体的站立位置;第一更新单元,用于获取所述骨骼模型的关节树结构,基于所述站立位置和所述关节树结构更新所述足部骨骼的关联骨骼的骨骼位置,其中,所述关节树结构用于表征所述骨骼模型中各级关节之间的约束关系。15、可选的,所述装置还包括:控制模块,用于若所述目标角色在游戏场景中的运动状态为站立状态,将所述目标角色的反向动力学引擎调整为开启状态。16、根据本发明的又一个实施例,还提供了一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。17、根据本发明的又一个实施例,还提供了一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。18、通过本发明,确定目标角色在游戏场景中的运动状态,若目标角色在游戏场景中的运动状态为站立状态,获取场景物体的模型数据,采用模型数据对目标角色和场景物体进行碰撞检测,得到碰撞位置,基于碰撞位置调整目标角色在场景物体上的站立位置,在虚拟角色为站立状态时采用场景物体的模型数据进行碰撞检测,基于角色与物体模型的碰撞位置更新目标角色在场景物体上的站立位置,可以直接使用场景物体的模型本身的模型数据,不需要额外调用其他的数据,也不会存在额外的空间占用,解决了相关技术检测角色的站立位置的效率低的技术问题,同时满足了玩家对于游戏场景画面表现力的需求。