CN118069106B - 批量添加碰撞体积的方法 - Google Patents
批量添加碰撞体积的方法 Download PDFInfo
- Publication number
- CN118069106B CN118069106B CN202410459003.5A CN202410459003A CN118069106B CN 118069106 B CN118069106 B CN 118069106B CN 202410459003 A CN202410459003 A CN 202410459003A CN 118069106 B CN118069106 B CN 118069106B
- Authority
- CN
- China
- Prior art keywords
- collision volume
- target element
- preset
- collision
- elements
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 42
- 238000003860 storage Methods 0.000 claims abstract description 19
- 230000008569 process Effects 0.000 claims abstract description 12
- 238000005266 casting Methods 0.000 claims description 18
- 230000004044 response Effects 0.000 claims description 9
- 238000011161 development Methods 0.000 abstract description 18
- 238000010586 diagram Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 9
- 238000012545 processing Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 7
- 238000004590 computer program Methods 0.000 description 7
- 230000003993 interaction Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 230000004075 alteration Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000006073 displacement reaction Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 230000006855 networking Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 239000002775 capsule Substances 0.000 description 1
- 230000010267 cellular communication Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Landscapes
- User Interface Of Digital Computer (AREA)
Abstract
本发明公开了一种批量添加碰撞体积的方法、装置、设备及计算机可读存储介质,该方法包括:在场景中所有元素加载完成后,根据预设添加条件遍历场景中的所有用户界面元素;根据遍历结果得到所有符合预设添加条件的用户界面元素作为目标元素,存储至目标元素列表;遍历所述目标元素列表,并在遍历的过程中为每个目标元素添加与其形状相匹配的碰撞体积。本发明的批量添加碰撞体积的方法具有开发效率高、碰撞体积与用户界面元素匹配度高的优点。
Description
技术领域
本发明涉及unity项目开发技术领域,尤其涉及一种批量添加碰撞体积的方法、装置、设备及计算机可读存储介质。
背景技术
在传统的unity游戏开发中,为UI元素添加碰撞体积通常是一个繁琐且耗时的过程。开发者需要逐一检查每个UI元素,并为其手动添加的碰撞体积。
这种传统方案存在一些明显的缺点,例如逐一为每个UI元素添加碰撞体积需要大量的人力和时间投入,导致开发成本效率低下的问题。又例如,手动添加碰撞体积往往是基于标准形状的碰撞体积(如矩形、圆形、三角形等形状),再面对非标准形状的UI元素时,所添加的碰撞体积形状与UI元素的实际形状不匹配,导致碰撞检测和用户交互精度低的问题。
发明内容
本申请实施例通过提供一种批量添加碰撞体积的方法,旨在提高项目开发效率及碰撞体积与用户界面元素的匹配度。
为实现上述目的,本申请实施例提供了一种批量添加碰撞体积的方法,包括:
在场景中所有元素加载完成后,根据预设添加条件遍历场景中的所有用户界面元素;
根据遍历结果得到所有符合预设添加条件的用户界面元素作为目标元素,存储至目标元素列表;
遍历所述目标元素列表,并在遍历的过程中为每个目标元素添加与其形状相匹配的碰撞体积。
在一实施例中,根据预设添加条件遍历场景中的所有用户界面元素,包括:
在遍历场景中的用户界面元素时,获取当前用户界面元素的描述属性;
根据所述描述属性判断当前用户界面元素是否符合预设添加条件。
在一实施例中,所述描述属性为射线投射响应属性;
根据所述描述属性判断当前用户界面元素是否符合预设添加条件,包括:
根据所述射线投射响应属性判断当前用户界面元素是否响应射线投射,若是,则判定当前用户界面元素符合预设添加条件。
在一实施例中,在遍历的过程中为每个目标元素添加与其形状相匹配的碰撞体积,包括:
在遍历目标元素列表中的目标元素时,获取当前目标元素的形状信息和尺寸信息;
根据当前目标元素的形状信息,从预设形状库中获取形状与当前目标元素形状匹配的预设碰撞体积模板;
获取所述预设碰撞体积模板的尺寸信息;
根据当前目标元素的尺寸信息与预设碰撞体积模板的尺寸信息计算缩放比例;
根据所述缩放比例缩放所述碰撞体积模板得到目标碰撞体积;
将所述目标碰撞体积添加至当前目标元素。
在一实施例中,获取当前目标元素的尺寸信息,包括:
获取当前目标元素的图像组件;
根据所述图像组件得到当前目标元素的尺寸信息。
在一实施例中,获取所述预设碰撞体积模板的尺寸信息,包括:
获取所述预设碰撞体积模板的矩形外框;
获取所述矩形外框的尺寸作为所述预设碰撞体积模板的尺寸信息。
在一实施例中,将计算得到的碰撞体积添加至当前目标元素,包括:
获取当前目标元素的图像组件的几何中心作为当前目标元素的几何中心;
获取所述目标碰撞体积的矩形外框的几何中心作为目标碰撞体积的几何中心;
将所述目标碰撞体积的几何中心与所述当前目标元素的几何中心重叠,以向当前目标元素添加碰撞体积。
为实现上述目的,本申请实施例还提出一种批量添加碰撞体积的装置,包括:
遍历模块,用于在场景中所有元素加载完成后,根据预设添加条件遍历场景中的所有用户界面元素;
存储模块,用于根据遍历结果得到所有符合预设添加条件的用户界面元素作为目标元素,存储至目标元素列表;
碰撞体积添加模块,用于遍历所述目标元素列表,并在遍历的过程中为每个目标元素添加与其形状相匹配的碰撞体积。
为实现上述目的,本申请实施例还提出一种批量添加碰撞体积的设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的批量添加碰撞体积的程序,所述处理器执行所述批量添加碰撞体积的程序时实现如上述任一项所述的批量添加碰撞体积的方法。
为实现上述目的,本申请实施例还提出一种计算机可读存储介质,所述计算机可读存储介质上存储有批量添加碰撞体积的程序,所述批量添加碰撞体积的程序被处理器执行时实现如上述任一项所述的批量添加碰撞体积的方法。
本申请技术方案的批量添加碰撞体积的方法,通过预设添加条件遍历场景中的用户界面元素,然后再遍历符合预设添加条件的用户界面元素,并为这些符合预设添加条件的用户界面元素添加与形状匹配的碰撞体积,从而完成了场景中用户界面元素碰撞体积的批量添加,提升了项目开发的效率,并能够提升碰撞体积与用户界面元素的匹配度。可见,相较于逐一为用户界面元素添加碰撞体积的传统方案而言,本申请技术方案的批量添加碰撞体积方法,具有开发效率高、碰撞体积与用户界面元素匹配度高的优点。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图示出的结构获得其他的附图。
图1为本发明批量添加碰撞体积的设备一实施例的模块结构图;
图2为本发明批量添加碰撞体积的方法一实施例的流程示意图;
图3为本发明批量添加碰撞体积的装置一实施例的模块结构图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
为了更好的理解上述技术方案,下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
应当注意的是,在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。文中出现的“包含”不排除存在未列在权利要求中的部件或步骤。位于部件之前的数量词“一”或“一个”不排除存在多个这样的部件。本发明可以借助于包括有若干不同部件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。而“第一”、“第二”、以及“第三”等的使用不表示任何顺序,可将这些词解释为名称。
如图1所示,图1是本发明实施例方案涉及的硬件运行环境的服务器1(又叫批量添加碰撞体积的设备)结构示意图。
本发明实施例服务器,如“物联网设备”、带联网功能的智能空调、智能电灯、智能电源,带联网功能的AR/VR设备,智能音箱、自动驾驶汽车、PC,智能手机、平板电脑、电子书阅读器、便携计算机等具有显示功能的设备。
如图1所示,所述服务器1包括:存储器11、处理器12及网络接口13。
其中,存储器11至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、磁性存储器、磁盘、光盘等。存储器11在一些实施例中可以是服务器1的内部存储单元,例如该服务器1的硬盘。存储器11在另一些实施例中也可以是服务器1的外部存储设备,例如该服务器1上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。
进一步地,存储器11还可以包括服务器1的内部存储单元也包括外部存储设备。存储器11不仅可以用于存储安装于服务器1的应用软件及各类数据,例如批量添加碰撞体积的程序10的代码等,还可以用于暂时地存储已经输出或者将要输出的数据。
处理器12在一些实施例中可以是一中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器或其他数据处理芯片,用于运行存储器11中存储的程序代码或处理数据,例如执行批量添加碰撞体积的程序10等。
网络接口13可选的可以包括标准的有线接口、无线接口(如WI-FI接口),通常用于在该服务器1与其他电子设备之间建立通信连接。
网络可以为互联网、云网络、无线保真(Wi-Fi)网络、个人网(PAN)、局域网(LAN)和/或城域网(MAN)。网络环境中的各种设备可以被配置为根据各种有线和无线通信协议连接到通信网络。这样的有线和无线通信协议的例子可以包括但不限于以下中的至少一个:传输控制协议和互联网协议(TCP/IP)、用户数据报协议(UDP)、超文本传输协议(HTTP)、文件传输协议(FTP)、ZigBee、EDGE、IEEE 802.11、光保真(Li-Fi)、802.16、IEEE 802.11s、IEEE 802.11g、多跳通信、无线接入点(AP)、设备对设备通信、蜂窝通信协议和/或蓝牙(BlueTooth)通信协议或其组合。
可选地,该服务器还可以包括用户接口,用户接口可以包括显示器(Display)、输入单元比如键盘(Keyboard),可选的用户接口还可以包括标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是LED显示器、液晶显示器、触控式液晶显示器以及OLED(Organic Light-Emitting Diode,有机发光二极管)触摸器等。其中,显示器也可以称为显示屏或显示单元,用于显示在服务器1中处理的信息以及用于显示可视化的用户界面。
图1仅示出了具有组件11-13以及批量添加碰撞体积的程序10的服务器1,本领域技术人员可以理解的是,图1示出的结构并不构成对服务器1的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
在本实施例中,处理器12可以用于调用存储器11中存储的批量添加碰撞体积的程序,并执行以下操作:
在场景中所有元素加载完成后,根据预设添加条件遍历场景中的所有用户界面元素;
根据遍历结果得到所有符合预设添加条件的用户界面元素作为目标元素,存储至目标元素列表;
遍历所述目标元素列表,并在遍历的过程中为每个目标元素添加与其形状相匹配的碰撞体积。
在一实施例中,处理器12可以用于调用存储器11中存储的批量添加碰撞体积的程序,并执行以下操作:
在遍历场景中的用户界面元素时,获取当前用户界面元素的描述属性;
根据所述描述属性判断当前用户界面元素是否符合预设添加条件。
在一实施例中,处理器12可以用于调用存储器11中存储的批量添加碰撞体积的程序,并执行以下操作:
根据所述射线投射响应属性判断当前用户界面元素是否响应射线投射,若是,则判定当前用户界面元素符合预设添加条件。
在一实施例中,处理器12可以用于调用存储器11中存储的批量添加碰撞体积的程序,并执行以下操作:
在遍历目标元素列表中的目标元素时,获取当前目标元素的形状信息和尺寸信息;
根据当前目标元素的形状信息,从预设形状库中获取形状与当前目标元素形状匹配的预设碰撞体积模板;
获取所述预设碰撞体积模板的尺寸信息;
根据当前目标元素的尺寸信息与预设碰撞体积模板的尺寸信息计算缩放比例;
根据所述缩放比例缩放所述碰撞体积模板得到目标碰撞体积;
将所述目标碰撞体积添加至当前目标元素。
在一实施例中,处理器12可以用于调用存储器11中存储的批量添加碰撞体积的程序,并执行以下操作:
获取当前目标元素的图像组件;
根据所述图像组件得到当前目标元素的尺寸信息。
在一实施例中,处理器12可以用于调用存储器11中存储的批量添加碰撞体积的程序,并执行以下操作:
获取所述预设碰撞体积模板的矩形外框;
获取所述矩形外框的尺寸作为所述预设碰撞体积模板的尺寸信息。
在一实施例中,处理器12可以用于调用存储器11中存储的批量添加碰撞体积的程序,并执行以下操作:
获取当前目标元素的图像组件的几何中心作为当前目标元素的几何中心;
获取所述目标碰撞体积的矩形外框的几何中心作为目标碰撞体积的几何中心;
将所述目标碰撞体积的几何中心与所述当前目标元素的几何中心重叠,以向当前目标元素添加碰撞体积。
基于上述批量添加碰撞体积的设备的硬件构架,提出本发明批量添加碰撞体积的方法的实施例。本发明的批量添加碰撞体积的方法,旨在提高项目开发效率及碰撞体积与用户界面元素的匹配度。
参照图2,图2为本发明批量添加碰撞体积的方法的一实施例,所述批量添加碰撞体积的方法包括以下步骤:
S10、在场景中所有元素加载完成后,根据预设添加条件遍历场景中所有的用户界面元素。
这其中,该场景为开发场景,例如unity开发场景、前端页面开发场景等场景,场景中的元素包括模型、纹理、音频、动画、UI(User Interface用户界面)等元素。
具体来说,在unity开发场景中,可以通过加载进度条确定当前场景中元素的加载进度,一旦加载进度达到100%,便表明场景中所有的元素已经加载完成。
进一步的,要遍历场景中的用户界面元素,需要先从场景中筛选出UI元素。而从场景的所有元素中筛选出UI元素,可以通过获取场景中所有元素的组件类型以实现。例如,可以判断元素是否具有Image(图像)、Text(文本)、Button(按钮)、Slide(滑块)等组件以确定元素是否为UI元素。
在识别出场景中所有的UI元素后,需要对场景中所有的UI元素进行遍历,并在遍历过程中,判断当前正在遍历的UI元素是否符合预设的添加条件。这其中,判断UI元素是否符合预设的添加条件,可以通过设置函数或条件来实现,该预设添加条件则需要根据实际开发需求所确定,例如,我们可以将场景中所有无法正常交互的UI元素、及所有默认需要交互的UI元素作为符合预设条件的UI元素;再例如,我们可以根据UI元素的属性、类型、位置等设定条件,以判断UI元素是否符合需求。
S20、根据遍历结果得到所有符合预设添加条件的用户界面元素作为目标元素,并存储至目标元素列表。
具体的,我们可以预先建立一个空的数据结构作为目标元素列表,然后将符合预设添加条件的UI元素添加至该目标元素列表中。这个动作可以在遍历UI元素的同时进行,即,在遍历场景中所有UI元素时,只要当前UI元素符合预设的添加条件,便将该UI元素添加至目标元素列表中。如此,当场景中的UI元素遍历完成后,便可同步完成目标元素的添加。当然,在其他实施例中,遍历UI元素与将目标元素添加至目标元素列表中两个行为也可以异步进行。
S30、遍历所述目标元素列表,并在遍历的过程中为每个目标元素添加与其形状相匹配的碰撞体积。
这其中,碰撞体积是游戏、虚拟现实、模拟实验等开发中用来模拟物体之间碰撞和交互的一种虚拟形状或区域。
举例来说,常见的碰撞体积包括立方体碰撞体(Box Collider)、球体碰撞体(Sphere Collider)、圆柱体碰撞体(Capsule Collider)、网格碰撞体(Mesh Collider)等。
进一步的,与形状匹配的碰撞体积是指碰撞体积与物体形状相符合的碰撞体积。这意味着碰撞体积的形状、大小和位置与物体的实际形状尽可能地相似或匹配,如此,可以更准确地模拟物体之间的碰撞和交互。
具体来说,在遍历目标元素数组中,可以根据当前UI元素的形状,为UI元素添加几乎一致或相近似的碰撞体积。这样,对于开发过程中,非标准形状(如五角星、六角星、六边形等)的UI元素,也能够添加相对精确的碰撞体积,提升其在游戏或模拟实验等场景中与用户或其他对象的交互精度。
此外,通过步骤S10至步骤S30,能够自动化地为场景中的大量UI元素添加碰撞体积,从而减少了开发者手动添加碰撞体积的工作量,提升了开发效率。并且,还可以根据预设条件灵活地控制哪些UI元素需要添加碰撞体积,这样可以根据实际需求和场景特点,选择性地为特定类型或位置的UI元素添加碰撞体积,以达到最佳的效果。
可以理解,本申请技术方案的批量添加碰撞体积的方法,通过预设添加条件遍历场景中的用户界面元素,然后再遍历符合预设添加条件的用户界面元素,并为这些符合预设添加条件的用户界面元素添加与形状匹配的碰撞体积,从而完成了场景中用户界面元素碰撞体积的批量添加,提升了项目开发的效率,并能够提升碰撞体积与用户界面元素的匹配度。可见,相较于逐一为用户界面元素添加碰撞体积的传统方案而言,本申请技术方案的批量添加碰撞体积方法,具有开发效率高、碰撞体积与用户界面元素匹配度高的优点。
在一些实施例中,根据预设添加条件遍历场景中的所有用户界面元素,包括:
S11、在遍历场景中的用户界面元素时,获取当前用户界面元素的描述属性。
这其中,描述属性是指UI元素的各种特征和属性,用于描述元素的特征、外观和行为。这些属性通常包括元素的类型、位置、大小、颜色、文本内容等信息。
具体来说,在遍历目标元素列表时,可以通过获取UI元素的RectTransform组件(RectTransform组件是Unity中用于控制UI元素位置和大小的组件,其包含了一个矩形区域的属性,可以通过sizeDelta(sizeDelta是RectTransform组件的一个属性,它表示矩形的大小相对于其锚点之间的距离,它是一个二维向量 (Vector2),存储矩形的宽度和高度)来获取其尺寸信息)以得到UI元素的位置和大小信息,及其他UI组件(如Text(文本)、Image(图像)、Button(按钮)等)获取UI组件的类型信息。
S12、根据所述描述属性判断当前用户界面元素是否符合预设添加条件。
具体的,***可以根据获取到的描述属性对每个用户界面元素进行判断,确定是否符合预设的添加条件。例如,***可以根据元素的位置、大小、类型等信息,来判断元素是否符合添加条件。
可以理解,由于描述属性通常涵盖了元素的各种特征和属性,能够全面地描述一个用户界面元素的外观和行为,并且描述属性可以根据实际需求进行灵活的定制和扩展,因此通过描述属性以判断UI元素是否符合预设添加条件,不仅能够更为精确地筛选出符合需求的UI元素,并且具有很强的灵活性。
在一些实施例中,所述描述属性为射线投射响应属性。
具体来说,射线投射响应属性即是raycasterTaget属性,该属性用于描述UI元素是否被设置为接收射线投射事件。当一个UI元素的raycasterTarget被设置为ture(即响应)时,意味着UI元素可以被射线投射所检测到,并触发相应的事件,如点击、悬停等。而当raycasterTarget属性被设置为false(即不响应)时,表示UI元素不会被射线投射所检测到,即不会对射线投射事件做出响应。
进一步的,根据所述描述属性判断当前用户界面元素是否符合预设添加条件,包括:
根据所述射线投射响应属性判断当前用户界面元素是否响应射线投射,若是,则判定当前用户界面元素符合预设添加条件。
具体的,在遍历目标元素列表中的UI元素时,获取当前UI元素的在raycasterTarget,并检查其raycasterTarget属性。如果元素的raycasterTarget属性为true,则判定当前UI元素符合预设添加条件。这意味着该元素被设置为接收射线投射事件,需要添加碰撞体积,以便与用户进行交互。
通过以上步骤,可以根据射线投射响应属性raycasterTarget自动判断UI元素是否符合预设添加条件。
在一些实施例中,在遍历的过程中为每个目标元素添加与其形状相匹配的碰撞体积,包括:
S31、在遍历目标元素列表中的目标元素时,获取当前目标元素的形状信息和尺寸信息。
具体来说,UI元素的形状信息可以通过UI元素的形状描述属性或组件来获取,或是通过图像识别的方式获取;而UI元素的尺寸信息可以通过RectTransform组件获取。
S32、根据当前目标元素的形状信息,从预设形状库中获取形状与当前目标元素形状匹配的预设碰撞体积模板;
这其中,预设形状库是事先定义的一个非标准形状碰撞体积的形状库,其中包含了各种非标准形状的碰撞体积模板。
具体的,在确定了当前目标元素的形状信息后(该形状信息可以为形状索引,以便于从预设形状库中检索相匹配的碰撞体积模板),可以根据当前目标元素的形状信息,遍历预设形状库,寻找与其形状匹配的预设碰撞体积模板,一旦找到与目标元素形状匹配的预设碰撞体积模板,就可以将其从预设形状库中提取出来,
在一些实施例中,可以将当前目标元素的形状信息,根据预设的规则或算法,将其转换为对应的形状索引(形状索引可以是一个数字、字符串或其他标识符,能够唯一地表示该形状)。然后,基于得到的形状索引,在预设形状库中查找与之匹配的碰撞体积模板。
值得说明的是,如果在预设形状库中找不到与目标元素形状匹配的预设碰撞体积模板,则***将向开发人员反馈形状匹配失败的信息,以提醒开发人员在预设形状库中补充对应形状模板。
S33、获取所述预设碰撞体积模板的尺寸信息。
具体来说,碰撞体积模板的尺寸信息通常包括模板的宽度和高度等信息,在确定了与当前目标元素形状相匹配的碰撞体积模板后,便可直接读取预设碰撞体积模板的尺寸信息。
S34、根据当前目标元素的尺寸信息与预设碰撞体积模板的尺寸信息计算缩放比例。
具体来说,通过将当前目标元素的尺寸信息与预设碰撞体积模板的尺寸信息进行比较,便可计算出预设碰撞体积模板相较于当前模板元素的缩放比例
可选择的,可以选择当前目标元素的宽度与预设碰撞体积模板的宽度之比,或当前目标元素的高度与预设碰撞体积模板的高度之比作为所需的缩放比例。
S35、根据所述缩放比例缩放所述碰撞体积模板得到目标碰撞体积。
具体来说,根据计算得到的缩放比例,对预设碰撞体积模板进行缩放操作,使其与当前目标元素的尺寸相匹配,便可得到所需的模板碰撞体积。
举例来说,对于五角星进行缩放时,可以分别缩放其顶点和边的长度。保持五角星的五个顶点与中心的距离相等,并按比例缩放边的长度,以保持其形状。
对六角星进行缩放时,可以分别缩放其内外边的长度。保持六角星的六个顶点与中心的距离相等,并按比例缩放内外边的长度,以保持其形状。
对六边形进行缩放时,只需要按比例缩放其边的长度即可。保持六边形的六个顶点与中心的距离相等,按比例缩放边的长度,以保持其形状。
S36、将所述目标碰撞体积添加至当前目标元素。
具体来说,在得到目标碰撞体积后,可以将该碰撞体积作为一个组件附加到目标元素上,以实现碰撞体积的添加。此外,根据需要,可以在添加碰撞体积组件后进一步设置其属性,如碰撞类型、碰撞层级、碰撞回调等属性。
在一些实施例中,获取当前目标元素的尺寸信息,包括:
S311、获取当前目标元素的图像组件;
具体来说,可以通过go.GetComponent<Image>()函数(go.GetComponent<Image>()函数用于从GameObject(在Unity中,GameObject是场景的基本构建块,它代表着游戏世界中的实体,例如角色、道具或场景元素)中检索 Image 组件,而Image 组件是Unity中的一个图形组件,用于在 UI(用户界面)中显示图像)获取当前目标元素的图像组件。
S312、根据所述图像组件得到当前目标元素的尺寸信息。
具体来说,如果当前目标元素是一个包含图像的UI元素,那么它可能会附加一个Image组件。如果存在,我们就可以继续获取该Image组件的尺寸信息。这可以通过Image组件的RectTransform属性来实现。
在一些实施例中,获取所述预设碰撞体积模板的尺寸信息,包括:
S331、获取所述预设碰撞体积模板的矩形外框;
S332、获取所述矩形外框的尺寸作为所述预设碰撞体积模板的尺寸信息。
具体来说,我们可以通过GetComponent<RectTransform>().rect(在Unity 中,GetComponent<RectTransform>().rect属性可用于访问与RectTransform组件关联的Rect结构。Rect结构则是一种表示矩形区域的数据结构,它存储有关矩形宽度、高度、位置(x和y坐标)和锚点的信息)来获取预设碰撞体积模板的矩形外框。在得到了预设碰撞体积模板的矩形外框后,可以继续获取该矩形外框的宽度和高度作为预设碰撞体积模板尺寸信息。这一步骤可以通过以下代码实现:
float width = presetRect.width;
float height = presetRect.height。
这其中,float是数据类型,表面变量可以以小数的形式存储;
width和height则是变量,在本申请中分别用于表示矩形外框的宽度和高度;
presetRect.width和presetRect.height是为声明的变量赋值。presetRect对象是对矩形对象的引用,被引用对象的width和height 属性被用来获取矩形的当前尺寸;
简而言之,这两行代码从presetRect对象中提取宽度和高度值,并将其存储在单独的变量中,以便后续使用。
在一些实施例中,将计算得到的碰撞体积添加至当前目标元素,包括:
S361、获取当前目标元素的图像组件的几何中心作为当前目标元素的几何中心。
具体来说,我们可以使用rectTransform.rect.center(在Unity中,rectTransform.rect.center用于访问由RectTransform组件表示的矩形 UI 元素的中心点)来获取图像组件的几何中心。由于当前目标元素的图像组件通常为矩形,而矩形的几何中心十分容易确定。因此相较于通过当前目标元素的位置信息来获取的几何中心的方案而言,能够在保证几何中心定位精度的前提下,节约获取当前目标元素几何中心的所需的计算资源。
S362、获取所述目标碰撞体积的矩形外框的几何中心作为目标碰撞体积的几何中心;
具体来说,我们可以通过矩形外框的左上角坐标以及宽度和高度来计算目标碰撞体积的矩形外框的几何中心。然后,将该几何中心作为目标碰撞体积的几何中心使用。
S363、将所述目标碰撞体积的几何中心与所述当前目标元素的几何中心重叠,以向当前目标元素添加碰撞体积。
具体来说,基于目标碰撞体积的几何中心与当前目标元素的几何中心,我们可以计算两者之间的位移向量,然后基于该位移向量,将目标碰撞体积的几何中心移动到当前目标元素的几何中心位置,使其与当前目标元素的几何中心重叠,从而向当前目标元素添加碰撞体积。
通过以上个步骤,我们可以保证目标碰撞体积与当前目标元素几乎完全重叠,进而有助于提高UI元素的碰撞检测或用户交互的精度。
此外,参照图3,本发明实施例还提出批量添加碰撞体积的装置,所述批量添加碰撞体积的装置包括:
遍历模块110,用于在场景中所有元素加载完成后,根据预设添加条件遍历场景中的所有用户界面元素;
存储模块120,用于根据遍历结果得到所有符合预设添加条件的用户界面元素作为目标元素,存储至目标元素列表;
碰撞体积添加模块130,用于遍历所述目标元素列表,并在遍历的过程中为每个目标元素添加与其形状相匹配的碰撞体积。
其中,批量添加碰撞体积的装置的各个功能模块实现的步骤可参照本发明批量添加碰撞体积的方法的各个实施例,此处不再赘述。
此外,本发明实施例还提出一种计算机可读存储介质,计算机可读存储介质可以是硬盘、多媒体卡、SD卡、闪存卡、SMC、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器等中的任意一种或者几种的任意组合。计算机可读存储介质中包括批量添加碰撞体积的程序10,本发明之计算机可读存储介质的具体实施方式与上述批量添加碰撞体积的方法以及服务器1的具体实施方式大致相同,在此不再赘述。
本领域内的技术人员应明白,本发明的实施例可提供为方法、***、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (6)
1.一种批量添加碰撞体积的方法,其特征在于,包括:
在场景中所有元素加载完成后,根据预设添加条件遍历场景中的所有用户界面元素;
根据遍历结果得到所有符合预设添加条件的用户界面元素作为目标元素,存储至目标元素列表;
遍历所述目标元素列表,并在遍历的过程中为每个目标元素添加与其形状相匹配的碰撞体积;其中,
根据预设添加条件遍历场景中的所有用户界面元素,包括:
在遍历场景中的用户界面元素时,获取当前用户界面元素的描述属性;
根据所述描述属性判断当前用户界面元素是否符合预设添加条件;
所述描述属性为射线投射响应属性;
根据所述描述属性判断当前用户界面元素是否符合预设添加条件,包括:
根据所述射线投射响应属性判断当前用户界面元素是否响应射线投射,若是,则判定当前用户界面元素符合预设添加条件;
在遍历的过程中为每个目标元素添加与其形状相匹配的碰撞体积,包括:
在遍历目标元素列表中的目标元素时,获取当前目标元素的形状信息和尺寸信息;
根据当前目标元素的形状信息,从预设形状库中获取形状与当前目标元素形状匹配的预设碰撞体积模板;
获取所述预设碰撞体积模板的尺寸信息;
根据当前目标元素的尺寸信息与预设碰撞体积模板的尺寸信息计算缩放比例;
根据所述缩放比例缩放所述碰撞体积模板得到目标碰撞体积;
将所述目标碰撞体积添加至当前目标元素;
将计算得到的碰撞体积添加至当前目标元素,包括:
获取当前目标元素的图像组件的几何中心作为当前目标元素的几何中心;
获取所述目标碰撞体积的矩形外框的几何中心作为目标碰撞体积的几何中心;
将所述目标碰撞体积的几何中心与所述当前目标元素的几何中心重叠,以向当前目标元素添加碰撞体积。
2.如权利要求1所述的批量添加碰撞体积的方法,其特征在于,获取当前目标元素的尺寸信息,包括:
获取当前目标元素的图像组件;
根据所述图像组件得到当前目标元素的尺寸信息。
3.如权利要求2所述的批量添加碰撞体积的方法,其特征在于,获取所述预设碰撞体积模板的尺寸信息,包括:
获取所述预设碰撞体积模板的矩形外框;
获取所述矩形外框的尺寸作为所述预设碰撞体积模板的尺寸信息。
4.一种批量添加碰撞体积的装置,用以实现如权利要求1至3中任一项所述的批量添加碰撞体积的方法,其特征在于,所述批量添加碰撞体积的装置包括:
遍历模块,用于在场景中所有元素加载完成后,根据预设添加条件遍历场景中的所有用户界面元素;
存储模块,用于根据遍历结果得到所有符合预设添加条件的用户界面元素作为目标元素,存储至目标元素列表;
碰撞体积添加模块,用于遍历所述目标元素列表,并在遍历的过程中为每个目标元素添加与其形状相匹配的碰撞体积。
5.一种批量添加碰撞体积的设备,其特征在于,包括存储器、处理器及存储在存储器上并可在处理器上运行的批量添加碰撞体积的程序,所述处理器执行所述批量添加碰撞体积的程序时实现如权利要求1-3中任一项所述的批量添加碰撞体积的方法。
6.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有批量添加碰撞体积的程序,所述批量添加碰撞体积的程序被处理器执行时实现如权利要求1-3中任一项所述的批量添加碰撞体积的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410459003.5A CN118069106B (zh) | 2024-04-17 | 2024-04-17 | 批量添加碰撞体积的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410459003.5A CN118069106B (zh) | 2024-04-17 | 2024-04-17 | 批量添加碰撞体积的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN118069106A CN118069106A (zh) | 2024-05-24 |
CN118069106B true CN118069106B (zh) | 2024-06-18 |
Family
ID=91097483
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410459003.5A Active CN118069106B (zh) | 2024-04-17 | 2024-04-17 | 批量添加碰撞体积的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118069106B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108139210A (zh) * | 2015-05-04 | 2018-06-08 | 株式会社三丰 | 提供用户定义的碰撞避免体积的检查程序编辑环境 |
CN111870954A (zh) * | 2020-07-24 | 2020-11-03 | 上海米哈游天命科技有限公司 | 一种高度图生成方法、装置、设备及存储介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113470169B (zh) * | 2021-06-30 | 2022-04-29 | 完美世界(北京)软件科技发展有限公司 | 游戏场景生成方法、装置、计算机设备及可读存储介质 |
WO2023051671A1 (zh) * | 2021-09-30 | 2023-04-06 | 上海莉莉丝互娱网络科技有限公司 | 基于体素数据的数据处理方法、服务器、介质及计算机程序产品 |
CN117224944A (zh) * | 2023-10-17 | 2023-12-15 | 网易(杭州)网络有限公司 | 虚拟对象的碰撞体的生成方法、装置和电子装置 |
-
2024
- 2024-04-17 CN CN202410459003.5A patent/CN118069106B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108139210A (zh) * | 2015-05-04 | 2018-06-08 | 株式会社三丰 | 提供用户定义的碰撞避免体积的检查程序编辑环境 |
CN111870954A (zh) * | 2020-07-24 | 2020-11-03 | 上海米哈游天命科技有限公司 | 一种高度图生成方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN118069106A (zh) | 2024-05-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112767489B (zh) | 一种三维位姿确定方法、装置、电子设备及存储介质 | |
US10909768B2 (en) | Virtual item simulation using detected surfaces | |
US9959675B2 (en) | Layout design using locally satisfiable proposals | |
CN102930522B (zh) | 一种实现图片拼接的装置和方法 | |
US20200394842A1 (en) | Method and device for a placement of a virtual object of an augmented or mixed reality application in a real-world 3d environment | |
CN111612880B (zh) | 基于二维画作的三维模型构建方法、电子设备及存储介质 | |
CN111359201B (zh) | 一种拼图类游戏方法、***及设备 | |
CN111240669B (zh) | 界面生成方法、装置、电子设备及计算机存储介质 | |
CN109816758B (zh) | 一种基于神经网络的二维角色动画生成方法和装置 | |
CN114786786A (zh) | 使用先前帧进行骨骼跟踪 | |
CN112241565A (zh) | 建模方法及相关装置 | |
CN114202622B (zh) | 虚拟建筑生成方法、装置、设备及计算机可读存储介质 | |
KR20200136723A (ko) | 가상 도시 모델을 이용하여 객체 인식을 위한 학습 데이터 생성 방법 및 장치 | |
CN115082609A (zh) | 图像渲染方法、装置、存储介质及电子设备 | |
CN112308948A (zh) | 用于房产营销的光场漫游模型的构建方法及应用 | |
CN112053440A (zh) | 单体化模型的确定方法及通信装置 | |
CN118069106B (zh) | 批量添加碰撞体积的方法 | |
CN109816744B (zh) | 一种基于神经网络的二维特效图片生成方法和装置 | |
WO2023231793A9 (zh) | 对物理场景进行虚拟化的方法、电子设备、计算机可读存储介质和计算机程序产品 | |
CN109284598B (zh) | 一种在教育云平台页面生成电子身份卡的方法及电子设备 | |
CN113742804B (zh) | 家具布局图生成方法、装置、设备及存储介质 | |
CN116212368A (zh) | 游戏中场景搭建控制方法、装置及电子设备 | |
CN112687003A (zh) | 一种建筑物模型的单体化方法及装置 | |
CN112419137A (zh) | 遮罩图片显示方法、装置及遮罩图片显示方法、装置 | |
CN111046472A (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 |