CN112200890A - 基于Unity的碰撞器设置方法及存储介质 - Google Patents
基于Unity的碰撞器设置方法及存储介质 Download PDFInfo
- Publication number
- CN112200890A CN112200890A CN201910609253.1A CN201910609253A CN112200890A CN 112200890 A CN112200890 A CN 112200890A CN 201910609253 A CN201910609253 A CN 201910609253A CN 112200890 A CN112200890 A CN 112200890A
- Authority
- CN
- China
- Prior art keywords
- bone
- bounding box
- data corresponding
- vertex data
- bone index
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T13/00—Animation
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Processing Or Creating Images (AREA)
Abstract
本发明公开了一种基于Unity的碰撞器设置方法及存储介质,方法包括:获取原始模型的网格数据中的顶点数据;分别获取各顶点数据对应的骨骼权重数据,所述骨骼权重数据包括对应的骨骼索引和骨骼权重;根据各顶点数据及其对应的骨骼权重数据,分别获取各骨骼索引对应的顶点数据;分别根据各骨骼索引对应的顶点数据,获取各骨骼索引对应的包围盒数据,所述包围盒数据包括包围盒的中心和大小;分别根据各骨骼索引对应的包围盒数据,为各骨骼索引对应的骨骼添加盒子碰撞器。本发明实现了碰撞器的精确设置。
Description
技术领域
本发明涉及碰撞器技术领域,尤其涉及一种基于Unity的碰撞器设置方法及存储介质。
背景技术
目前,Unity为我们提供了检查碰撞的一些Collider(碰撞器)组件来对物体进行设置。但是对于带动画的模型会发生形变,那么碰撞组件就不能完全覆盖模型,并且,若应用一个很大的BoxCollider(盒子碰撞器)将模型全部覆盖也会造成一大部分不属于模型的区域也在检测之内,从而造成误操作。因此,如何为带动画的模型精确设置碰撞器成为有待解决的问题。
发明内容
本发明所要解决的技术问题是:提供一种基于Unity的碰撞器设置方法及存储介质,可精确设置碰撞器。
为了解决上述技术问题,本发明采用的技术方案为:一种基于Unity的碰撞器设置方法,包括:
获取原始模型的网格数据中的顶点数据;
分别获取各顶点数据对应的骨骼权重数据,所述骨骼权重数据包括对应的骨骼索引和骨骼权重;
根据各顶点数据及其对应的骨骼权重数据,分别获取各骨骼索引对应的顶点数据;
分别根据各骨骼索引对应的顶点数据,获取各骨骼索引对应的包围盒数据,所述包围盒数据包括包围盒的中心和大小;
分别根据各骨骼索引对应的包围盒数据,为各骨骼索引对应的骨骼添加盒子碰撞器。
本发明还涉及一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如下步骤:
获取原始模型的网格数据中的顶点数据;
分别获取各顶点数据对应的骨骼权重数据,所述骨骼权重数据包括对应的骨骼索引和骨骼权重;
根据各顶点数据及其对应的骨骼权重数据,分别获取各骨骼索引对应的顶点数据;
分别根据各骨骼索引对应的顶点数据,获取各骨骼索引对应的包围盒数据,所述包围盒数据包括包围盒的中心和大小;
分别根据各骨骼索引对应的包围盒数据,为各骨骼索引对应的骨骼添加盒子碰撞器。
本发明的有益效果在于:根据各顶点数据对应的骨骼权重数据,得到各骨骼索引对应的顶点数据,通过将同一骨骼对应的所有顶点数据,生成一个小的检测区域,使得该骨骼的检测区域只受到该骨骼运动的影响,细分了检测区域;通过为每个骨骼生成局部的盒子碰撞器,既能在播放动画的时候覆盖检测区域,又不会覆盖其他不属于该骨骼的检测区域,并且还可以在动画播放的时候使其检测区域跟随移动和旋转。本发明根据各骨骼的包围盒数据,为各骨骼添加盒子碰撞器,实现了碰撞器的精确设置。
附图说明
图1为本发明的一种基于Unity的碰撞器设置方法的流程图;
图2为本发明实施例一的方法流程图。
具体实施方式
为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图详予说明。
本发明最关键的构思在于:为每个骨骼生成局部的盒子碰撞器。
请参阅图1,一种基于Unity的碰撞器设置方法,包括:
获取原始模型的网格数据中的顶点数据;
分别获取各顶点数据对应的骨骼权重数据,所述骨骼权重数据包括对应的骨骼索引和骨骼权重;
根据各顶点数据及其对应的骨骼权重数据,分别获取各骨骼索引对应的顶点数据;
分别根据各骨骼索引对应的顶点数据,获取各骨骼索引对应的包围盒数据,所述包围盒数据包括包围盒的中心和大小;
分别根据各骨骼索引对应的包围盒数据,为各骨骼索引对应的骨骼添加盒子碰撞器。
从上述描述可知,本发明的有益效果在于:实现了碰撞器的精确设置。
进一步地,所述分别根据各骨骼索引对应的顶点数据,获取各骨骼索引对应的包围盒数据具体为:
计算一骨骼索引对应的顶点数据的中心点,并将所述中心点设为所述一骨骼索引对应的包围盒的中心;
通过调用Encapsulate接口,扩大所述包围盒的边界框,得到所述包围盒的大小。
进一步地,所述分别根据各骨骼索引对应的包围盒数据,为各骨骼索引对应的骨骼添加盒子碰撞器具体为:
将一骨骼索引对应的骨骼的盒子碰撞器的中心和大小分别设为所述一骨骼索引对应的包围盒的中心和大小。
由上述描述可知,通过先获取包围盒数据,再根据包围盒数据设置盒子碰撞器,可生成精细的碰撞盒。
进一步地,所述获取原始模型的网格数据中的顶点数据之后,进一步包括:
将所述顶点数据的坐标系转换为世界坐标系。
进一步地,所述分别根据各骨骼索引对应的顶点数据,获取各骨骼索引对应的包围盒数据之前,进一步包括:
分别将各骨骼索引对应的顶点数据的坐标系转换为各骨骼索引对应的骨骼的坐标系。
由上述描述可知,通过进行坐标系的转换,便于计算,且可在世界坐标系中可视化地观察碰撞盒的设置效果,便于调试。
本发明还涉及一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如上所述的步骤。
实施例一
请参照图2,本发明的实施例一为:一种基于Unity的碰撞器设置方法,可应用于Unity引擎平台,适用于以3D形式展示的模型,包括如下步骤:
S1:获取原始模型的网格数据;具体地,从SkinnedMeshRenderer组件中获取原始模型的蒙皮网格数据,调用sr.BakeMesh(mesh)拷贝一份该原始模型的网格数据。进一步地,所述原始模型可为带动画的模型。
S2:获取网格数据中的顶点数据,进一步地,将所述顶点数据的坐标系转换为世界坐标系,即将顶点数据的坐标从局部坐标转换为世界坐标,采用的方法是先缩放后旋转再平移。本实施例中,可以忽略缩放因子给模型带来的影响,因为BakeMesh得到的网格数据的缩放因子是等比例缩放并且值是1,在坐标系之间的转化过程中一定要遵守先缩放后旋转再平移的规则,才不会导致形变或者错误的效果发生。
具体地,可采用复合矩阵进行坐标转换,所述复合矩阵=Matrix4x4.Translate(sr.transform.position)×Matrix4x4.Rotate(sr.transform.rotation)。
S3:分别获取各顶点数据对应的骨骼权重数据,所述骨骼权重数据包括对应的骨骼索引和骨骼权重;即获取每个顶点与之相对应的BoneWeight数据,该数据中可以获取到影响顶点的骨骼的骨骼索引以及影响的权重,一个顶点最后受四个骨骼的影响,当骨骼权重为0时,表示该顶点不受这个骨骼的影响。
其中,模型的所有骨骼存放在sr.bones中,可以通过骨骼索引可以获取到模型具体的骨骼。
S4:根据各顶点数据及其对应的骨骼权重数据,分别获取各骨骼索引对应的顶点数据;即根据骨骼索引,获取受该骨骼索引对应的骨骼影响的所有顶点数据,然后将该骨骼索引和所获取的顶点数据进行关联。
S5:分别根据各骨骼索引对应的顶点数据,获取各骨骼索引对应的包围盒数据,所述包围盒数据包括包围盒的中心和大小。
具体地,遍历各骨骼索引,依次获取一骨骼索引,然后将所述一骨骼索引对应的顶点数据的坐标系从世界坐标系转换为所述一骨骼索引对应的骨骼的坐标系,即通过tran.InverseTransformPoint,将该骨骼索引对应的顶点数据的坐标从世界坐标转换为局部坐标。接着计算所述一骨骼索引对应的顶点数据的中心点,并将所述中心点设为所述一骨骼索引对应的包围盒的中心,具体地,可以先统计该骨骼索引对应的顶点总数,然后将转换坐标系后的顶点数据的坐标相加后除以顶点总数,即可得到中心点的坐标。最后通过调用Encapsulate接口(给定一个位置信息给该接口,该接口将会扩大包围盒Bound的大小使得该位置在包围盒区域内),扩大所述包围盒的边界框,得到所述包围盒的大小,其中,所述中心点在所述边界框内,这样就获取到该骨骼索引对应的包围盒数据。
S6:分别根据各骨骼索引对应的包围盒数据,为各骨骼索引对应的骨骼添加盒子碰撞器BoxCollider。具体地,将一骨骼索引对应的骨骼的盒子碰撞器的中心和大小分别设为所述一骨骼索引对应的包围盒的中心和大小,即BoxCollider的中心等于Bounds的中心,BoxCollider的大小等于Bounds的大小。
先获取Bounds(包围盒)数据,再根据Bounds(包围盒)数据设置BoxCollider(盒子碰撞器),即可生成精细的碰撞盒。
在动画播放的过程中,每个顶点都会发生位移,影响它的就是模型的骨骼,骨骼相当于是父节点,顶点数据相当于是子节点,骨骼变化影响了顶点数据的变化。只要将同一骨骼对应的所有顶点数据,生成一个小的检测区域BoxCollider(盒子碰撞器),就可以细分检测的区域,一个骨骼对应的检测区域将只受到这个骨骼运动的影响。骨骼的移动必然带动该骨骼对应的检测区域移动,其他骨骼的运动将不会影响该骨骼对应的检测区域。
本实施例为每个骨骼生成局部的BoxCollider(盒子碰撞器),细化了检测区域,既能在播放动画的时候覆盖检测区域,又不会覆盖其他不属于该骨骼的检测区域,并且还可以在动画播放的时候使其检测区域跟随移动和旋转。
实施例二
本实施例是对应上述实施例的一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如下步骤:
获取原始模型的网格数据中的顶点数据;
分别获取各顶点数据对应的骨骼权重数据,所述骨骼权重数据包括对应的骨骼索引和骨骼权重;
根据各顶点数据及其对应的骨骼权重数据,分别获取各骨骼索引对应的顶点数据;
分别根据各骨骼索引对应的顶点数据,获取各骨骼索引对应的包围盒数据,所述包围盒数据包括包围盒的中心和大小;
分别根据各骨骼索引对应的包围盒数据,为各骨骼索引对应的骨骼添加盒子碰撞器。
进一步地,所述分别根据各骨骼索引对应的顶点数据,获取各骨骼索引对应的包围盒数据具体为:
计算一骨骼索引对应的顶点数据的中心点,并将所述中心点设为所述一骨骼索引对应的包围盒的中心;
通过调用Encapsulate接口,扩大所述包围盒的边界框,得到所述包围盒的大小。
进一步地,所述分别根据各骨骼索引对应的包围盒数据,为各骨骼索引对应的骨骼添加盒子碰撞器具体为:
将一骨骼索引对应的骨骼的盒子碰撞器的中心和大小分别设为所述一骨骼索引对应的包围盒的中心和大小。
进一步地,所述获取原始模型的网格数据中的顶点数据之后,进一步包括:
将所述顶点数据的坐标系转换为世界坐标系。
进一步地,所述分别根据各骨骼索引对应的顶点数据,获取各骨骼索引对应的包围盒数据之前,进一步包括:
分别将各骨骼索引对应的顶点数据的坐标系转换为各骨骼索引对应的骨骼的坐标系。
综上所述,本发明提供的一种基于Unity的碰撞器设置方法及存储介质,根据各顶点数据对应的骨骼权重数据,得到各骨骼索引对应的顶点数据,通过将同一骨骼对应的所有顶点数据,生成一个小的检测区域,使得该骨骼的检测区域只受到该骨骼运动的影响,细分了检测区域;通过为每个骨骼生成局部的盒子碰撞器,既能在播放动画的时候覆盖检测区域,又不会覆盖其他不属于该骨骼的检测区域,并且还可以在动画播放的时候使其检测区域跟随移动和旋转;通过进行坐标系的转换,便于计算,且可在世界坐标系中可视化地观察碰撞盒的设置效果,便于调试。本发明根据各骨骼的包围盒数据,为各骨骼添加盒子碰撞器,实现了碰撞器的精确设置。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种基于Unity的碰撞器设置方法,其特征在于,包括:
获取原始模型的网格数据中的顶点数据;
分别获取各顶点数据对应的骨骼权重数据,所述骨骼权重数据包括对应的骨骼索引和骨骼权重;
根据各顶点数据及其对应的骨骼权重数据,分别获取各骨骼索引对应的顶点数据;
分别根据各骨骼索引对应的顶点数据,获取各骨骼索引对应的包围盒数据,所述包围盒数据包括包围盒的中心和大小;
分别根据各骨骼索引对应的包围盒数据,为各骨骼索引对应的骨骼添加盒子碰撞器。
2.根据权利要求1所述的基于Unity的碰撞器设置方法,其特征在于,所述分别根据各骨骼索引对应的顶点数据,获取各骨骼索引对应的包围盒数据具体为:
计算一骨骼索引对应的顶点数据的中心点,并将所述中心点设为所述一骨骼索引对应的包围盒的中心;
通过调用Encapsulate接口,扩大所述包围盒的边界框,得到所述包围盒的大小。
3.根据权利要求1所述的基于Unity的碰撞器设置方法,其特征在于,所述分别根据各骨骼索引对应的包围盒数据,为各骨骼索引对应的骨骼添加盒子碰撞器具体为:
将一骨骼索引对应的骨骼的盒子碰撞器的中心和大小分别设为所述一骨骼索引对应的包围盒的中心和大小。
4.根据权利要求1所述的基于Unity的碰撞器设置方法,其特征在于,所述获取原始模型的网格数据中的顶点数据之后,进一步包括:
将所述顶点数据的坐标系转换为世界坐标系。
5.根据权利要求4所述的基于Unity的碰撞器设置方法,其特征在于,所述分别根据各骨骼索引对应的顶点数据,获取各骨骼索引对应的包围盒数据之前,进一步包括:
分别将各骨骼索引对应的顶点数据的坐标系转换为各骨骼索引对应的骨骼的坐标系。
6.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如下步骤:
获取原始模型的网格数据中的顶点数据;
分别获取各顶点数据对应的骨骼权重数据,所述骨骼权重数据包括对应的骨骼索引和骨骼权重;
根据各顶点数据及其对应的骨骼权重数据,分别获取各骨骼索引对应的顶点数据;
分别根据各骨骼索引对应的顶点数据,获取各骨骼索引对应的包围盒数据,所述包围盒数据包括包围盒的中心和大小;
分别根据各骨骼索引对应的包围盒数据,为各骨骼索引对应的骨骼添加盒子碰撞器。
7.根据权利要求6所述的计算机可读存储介质,其特征在于,所述分别根据各骨骼索引对应的顶点数据,获取各骨骼索引对应的包围盒数据具体为:
计算一骨骼索引对应的顶点数据的中心点,并将所述中心点设为所述一骨骼索引对应的包围盒的中心;
通过调用Encapsulate接口,扩大所述包围盒的边界框,得到所述包围盒的大小。
8.根据权利要求6所述的计算机可读存储介质,其特征在于,所述分别根据各骨骼索引对应的包围盒数据,为各骨骼索引对应的骨骼添加盒子碰撞器具体为:
将一骨骼索引对应的骨骼的盒子碰撞器的中心和大小分别设为所述一骨骼索引对应的包围盒的中心和大小。
9.根据权利要求6所述的计算机可读存储介质,其特征在于,所述获取原始模型的网格数据中的顶点数据之后,进一步包括:
将所述顶点数据的坐标系转换为世界坐标系。
10.根据权利要求9所述的计算机可读存储介质,其特征在于,所述分别根据各骨骼索引对应的顶点数据,获取各骨骼索引对应的包围盒数据之前,进一步包括:
分别将各骨骼索引对应的顶点数据的坐标系转换为各骨骼索引对应的骨骼的坐标系。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910609253.1A CN112200890B (zh) | 2019-07-08 | 2019-07-08 | 基于Unity的碰撞器设置方法及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910609253.1A CN112200890B (zh) | 2019-07-08 | 2019-07-08 | 基于Unity的碰撞器设置方法及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112200890A true CN112200890A (zh) | 2021-01-08 |
CN112200890B CN112200890B (zh) | 2023-09-29 |
Family
ID=74004424
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910609253.1A Active CN112200890B (zh) | 2019-07-08 | 2019-07-08 | 基于Unity的碰撞器设置方法及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112200890B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101320482A (zh) * | 2008-07-08 | 2008-12-10 | 浙江大学 | 基于视频纹理的虚拟跑步运动员的绘制方法 |
CN104606887A (zh) * | 2014-12-30 | 2015-05-13 | 北京像素软件科技股份有限公司 | 一种碰撞判定方法 |
CN105006014A (zh) * | 2015-02-12 | 2015-10-28 | 上海交通大学 | 虚拟衣物快速模拟试穿的实现方法及系统 |
CN105976418A (zh) * | 2016-06-28 | 2016-09-28 | 珠海金山网络游戏科技有限公司 | 一种人物动态骨骼的设计系统和方法 |
US20180040101A1 (en) * | 2015-11-30 | 2018-02-08 | Tencent Technology (Shenzhen) Company Limited | Method for detecting collision between cylindrical collider and convex body in real-time virtual scenario, terminal, and storage medium |
CN108961365A (zh) * | 2017-05-19 | 2018-12-07 | 腾讯科技(深圳)有限公司 | 三维虚拟对象摆动方法、装置、存储介质和计算机设备 |
CN109285209A (zh) * | 2018-09-14 | 2019-01-29 | 网易(杭州)网络有限公司 | 游戏角色的面部模型的处理方法、装置、处理器及终端 |
-
2019
- 2019-07-08 CN CN201910609253.1A patent/CN112200890B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101320482A (zh) * | 2008-07-08 | 2008-12-10 | 浙江大学 | 基于视频纹理的虚拟跑步运动员的绘制方法 |
CN104606887A (zh) * | 2014-12-30 | 2015-05-13 | 北京像素软件科技股份有限公司 | 一种碰撞判定方法 |
CN105006014A (zh) * | 2015-02-12 | 2015-10-28 | 上海交通大学 | 虚拟衣物快速模拟试穿的实现方法及系统 |
US20180040101A1 (en) * | 2015-11-30 | 2018-02-08 | Tencent Technology (Shenzhen) Company Limited | Method for detecting collision between cylindrical collider and convex body in real-time virtual scenario, terminal, and storage medium |
CN105976418A (zh) * | 2016-06-28 | 2016-09-28 | 珠海金山网络游戏科技有限公司 | 一种人物动态骨骼的设计系统和方法 |
CN108961365A (zh) * | 2017-05-19 | 2018-12-07 | 腾讯科技(深圳)有限公司 | 三维虚拟对象摆动方法、装置、存储介质和计算机设备 |
CN109285209A (zh) * | 2018-09-14 | 2019-01-29 | 网易(杭州)网络有限公司 | 游戏角色的面部模型的处理方法、装置、处理器及终端 |
Also Published As
Publication number | Publication date |
---|---|
CN112200890B (zh) | 2023-09-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11301954B2 (en) | Method for detecting collision between cylindrical collider and convex body in real-time virtual scenario, terminal, and storage medium | |
CN105488851B (zh) | 实时虚拟场景中碰撞体之间碰撞探测的方法和装置 | |
CN111803945B (zh) | 界面渲染方法、装置、电子设备及存储介质 | |
CN104077446B (zh) | 从数字化三维模型中提取二维电气施工图的方法及系统 | |
US20150088474A1 (en) | Virtual simulation | |
CN104461690B (zh) | 一种电力设备运行仿真系统 | |
CN112632683A (zh) | 基于虚幻引擎的数字孪生城市空间定位方法、装置及存储介质 | |
CN110322539B (zh) | 三维物体的三维模型切割过程显示方法、装置与电子设备 | |
CN109613979B (zh) | 一种字符输入方法、装置、ar设备和计算机存储介质 | |
CN112200890B (zh) | 基于Unity的碰撞器设置方法及存储介质 | |
Valentini | Natural interface in augmented reality interactive simulations: This paper demonstrates that the use of a depth sensing camera that helps generate a three-dimensional scene and track user's motion could enhance the realism of the interactions between virtual and physical objects | |
Hung et al. | Automatic clustering method for real-time construction simulation | |
CN116681831A (zh) | 一种自下而上的单图像全景重建方法、装置及计算机设备 | |
CN116127802A (zh) | 3d视景展示cae仿真结果的方法、装置及系统 | |
CN114549428A (zh) | 一种基于目标检测的装配诱导信息生成及显示方法 | |
CN109740234B (zh) | 一种家居布局3d碰撞检测方法及系统 | |
CN114494577A (zh) | 展示方法、装置、电子设备及存储介质 | |
CN114140508A (zh) | 一种三维重建模型生成的方法、系统、设备及可读存储介质 | |
CN112489203A (zh) | 模型处理方法、模型处理装置、电子设备及存储介质 | |
CN109597480A (zh) | 人机交互方法、装置、电子设备及计算机可读存储介质 | |
CN118172522A (zh) | 标签渲染方法、装置、设备及可读存储介质 | |
CN114519761A (zh) | 一种人脸纹理图的生成方法、装置、存储介质及设备 | |
CN115546363A (zh) | 一种解决三维人体模型的穿模方法及电子设备 | |
JP5974568B2 (ja) | 算出装置、算出プログラムおよび算出方法 | |
CN115713580A (zh) | 根骨骼关键帧数据的生成方法、装置、介质及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |