CN111603773B - 基于ue4引擎的物体同步方法、装置、设备及存储介质 - Google Patents
基于ue4引擎的物体同步方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN111603773B CN111603773B CN202010459400.4A CN202010459400A CN111603773B CN 111603773 B CN111603773 B CN 111603773B CN 202010459400 A CN202010459400 A CN 202010459400A CN 111603773 B CN111603773 B CN 111603773B
- Authority
- CN
- China
- Prior art keywords
- vector
- force application
- engine
- variable
- collision
- 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
Images
Classifications
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/55—Controlling game characters or game objects based on the game progress
- A63F13/57—Simulating properties, behaviour or motion of objects in the game world, e.g. computing tyre load in a car race game
- A63F13/577—Simulating properties, behaviour or motion of objects in the game world, e.g. computing tyre load in a car race game using determination of contact between game characters or objects, e.g. to avoid collision between virtual racing cars
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F2300/00—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
- A63F2300/60—Methods for processing data by generating or executing the game program
- A63F2300/64—Methods for processing data by generating or executing the game program for computing dynamical parameters of game objects, e.g. motion determination or computation of frictional forces for a virtual car
- A63F2300/643—Methods for processing data by generating or executing the game program for computing dynamical parameters of game objects, e.g. motion determination or computation of frictional forces for a virtual car by determining the impact between objects, e.g. collision detection
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D30/00—Reducing energy consumption in communication networks
- Y02D30/70—Reducing energy consumption in communication networks in wireless communication networks
Abstract
本发明涉及VR技术领域,公开了一种基于UE4引擎的物体同步方法、装置、设备及存储介质,通过在施力物与物体碰撞时,判断配置属性变量中的指针是否为空,若否,则碰撞无效,若是,则计算施力物碰撞物体的瞬间与碰撞后下一帧的偏移向量;获取物体在可移动方向上的向前向量并计算偏移向量与向前向量的点积值,若点积值大于零,则将偏移向量投影在物体的可移动方向上,得到物体的位移向量;将位移向量施加在物体上,推动所述物体移动,并调用服务器将物体移动后位置广播至各客户端。基于设置指针来对各用户的碰撞进行区分,实现多用户对同一物体进行碰撞时,屏蔽用户碰撞间的相互干扰,从而简化了对碰撞位移向量的计算过程,提高了计算的精准度。
Description
技术领域
本发明涉及虚拟现实技术领域,尤其涉及一种基于UE4引擎的物体同步方法、装置、设备及存储介质。
背景技术
虚拟现实(virtual reality,简称VR)技术是一种可以在虚拟环境中完成一系列动作的计算机技术,随着计算机软硬件的不断发展,虚拟环境的搭建越发完整,功能越发完善。而虚拟现实技术常常会应用到在各类游戏应用场景中。
在游戏应用中,常常需要操作虚拟物体进行移动,在现有的技术中,使用UE4自带的物理模拟的物理约束方式实现此功能会存在诸多不稳定的因素,因为在基于UE4引擎的游戏环境中同时存在多个用户对同一物体进行碰撞推动,这些用户的碰撞推动会相互影响,并且周边的物体也会相互影响,从而导致最终的推动唯一,由于相互的影响使得引擎的数据处理较为复杂,从而导致推不动卡住,使得在多人环境下的游戏体现表现不好,甚至可能出现物理碰撞推动在各个端同步不一样,造成抖动卡顿的感觉。
发明内容
本发明的主要目的在于解决现有UE4引擎的物体移动同步实现,在多人环境中用户对物体的操作会相互影响,而导致最终的物体移动同步不准确的技术问题。
本发明第一方面提供了一种基于UE4引擎的物体同步方法,包括:
检测用户当前位置上的物体,并获取所述物体的配置属性变量,所述配置属性变量包括用于保存施力物推物体的碰撞框是否有效的指针;
当所述施力物与所述物体碰撞时,判断所述配置属性变量中的指针是否为空;
若所述指针不为空,则确定所述物体存在多个方向上的推动,并将所述施力物与所述物体的当前碰撞设置为无效;
若所述指针为空,则确定所述物体可在当前碰撞的方向上被推动,并记录所述物体被碰撞瞬间所述施力物的坐标位置,根据所述坐标位置更新第一变量,所述第一变量表示当前帧所述施力物推动所述物体的最后坐标位置;
获取所述物体被碰撞后的下一帧的所述施力物的起始坐标位置,并根据所述第一变量和所述起始坐标位置计算所述施力物的偏移向量;
获取所述物体在可移动方向上的向前向量,并利用点积函数计算所述偏移向量与所述向前向量的点积值;
若所述点积值大于零,则基于投影计算原理计算所述偏移向量在所述物体的可移动方向上的位移向量;
根据所述位移向量控制所述物体向移动,并记录所述物体移动后的位置信息;
调用所述UE4引擎中的服务器对所述位置信息进行插值平滑过渡处理后,广播至所述UE4引擎中的所有客户端。
可选的,在本发明第一方面的第一种实现方式中,所述获取所述物体被碰撞后的下一帧的所述施力物的起始坐标位置,并根据所述第一变量和所述起始坐标位置计算所述施力物的偏移向量包括:
获取所述物体停止移动时,所述施力物所在的位置信息;
基于所述位置信息和预置的世界坐标系的坐标原点,计算出所述施力物相对于所述坐标原点的三维坐标值,得到下一帧的所述施力物的起始坐标位置;
将所述起始坐标位置减去所述最后坐标位置,得到所述偏移向量。
可选的,在本发明第一方面的第二种实现方式中,所述获取所述物体在可移动方向上的向前向量,并利用点积函数计算所述偏移向量与所述向前向量的点积值包括:
根据所述指针确定所述物体被推动的方向的向前向量;
基于所述偏移向量和向前向量分别进行单位化处理,得到偏移向量的单位向量和向前向量的单位向量;
调用点积函数对所述偏移向量的单位向量和所述向前向量的单位向量进行点积计算,得到对应的点积值。
可选的,在本发明第一方面的第三种实现方式中,所述基于投影计算原理计算所述偏移向量在所述物体的可移动方向上的位移向量包括:
根据所述第一变量和起始坐标位置计算所述偏移向量的长度;
将所述长度乘以所述点积值,再乘以所述向前向量的单位向量,得到所述物体的可移动方向上的位移向量。
可选的,在本发明第一方面的第四种实现方式中,所述配置属性变量还包括用于记录所述物体被碰撞推动的历史位移的物体移动变量,在所述根据所述位移向量控制所述物体向移动,并记录所述物体移动后的位置信息之后,还包括:
从所述配置属性变量中获取物体移动变量的值,其中,所述物体移动变量的值为所述物体在当前帧之前被施力物推动的历史总推动距离;
将所述物体移动变量的值加上所述偏移向量投影在所述物体对应的可移动方向上的模,得到所述物体的当前总移动距离;
判断所述当前总移动距离是否小于所述物体的预置可移动阈值;
若否,则将所述物体设置为不可移动状态。可选的,在本发明第一方面的第五种实现方式中,所述调用所述UE4引擎中的服务器对所述位置信息进行插值平滑过渡处理后,广播至所述UE4引擎中的所有客户端包括:
通过所述UE4引擎中的服务器确定所述UE4引擎中各客户端上对应物体的当前位置,并将所述当前位置设置为起始点;
将所述位置信息设置为终点,并调用时间线函数和线性插值函数,在所述起始点和所述终点之间进行插值平滑移动处理,得到所述物体的推动结果;
通过所述服务器,将所述物体的推动结果广播至所述UE4引擎中的所有客户端。
可选的,在本发明第一方面的第六种实现方式中,其特征在于,所述将所述位置信息设置为终点,并调用时间线函数和线性插值函数,在所述起始点和所述终点之间进行插值平滑处理,得到所述物体的推动结果包括:
将所述位置信息设置为终点,并调用所述时间线函数;
将预置时间输入到所述时间线函数中,输出曲线值;
调用所述线性插值函数,并将所述曲线值输入至所述线性插值函数中,所述线性插值函数根据输入的曲线值,设置所述物体在所述起止点和所述终点之间的位置,进行插值平滑移动,得到所述物体的推动结果。
本发明第二方面提供了一种基于UE4引擎的物体同步装置,包括:
获取模块,用于检测用户当前位置上的物体,并获取所述物体的配置属性变量,所述配置属性变量包括用于保存施力物推物体的碰撞框是否有效的指针;
判断模块,用于当所述施力物与所述物体碰撞时,判断所述配置属性变量中的指针是否为空;
配置模块,用于在所述指针不为空时,确定所述物体存在多个方向上的推动,并将所述施力物与所述物体的当前碰撞设置为无效;
更新模块,用于在所述指针为空时,确定所述物体可在当前碰撞的方向上被推动,并记录所述物体被碰撞瞬间所述施力物的坐标位置,根据所述坐标位置更新第一变量,所述第一变量表示当前帧所述施力物推动所述物体的最后坐标位置;
偏移向量计算模块,获取所述物体被碰撞后的下一帧的所述施力物的起始坐标位置,并根据所述第一变量和所述起始坐标位置计算所述施力物的偏移向量;
点积模块,获取所述物体在可移动方向上的向前向量,并利用点积函数计算所述偏移向量与所述向前向量的点积值;
位移向量计算模块,用于在所述点积值大于零时,基于投影计算原理计算所述偏移向量在所述物体的可移动方向上的位移向量;
记录模块,用于根据所述位移向量控制所述物体向移动,并记录所述物体移动后的位置信息;
同步模块,用于调用所述UE4引擎中的服务器对所述位置信息进行插值平滑过渡处理后,广播至所述UE4引擎中的所有客户端。
可选的,在本发明第二方面的第一种实现方式中,所述偏移向量模块具体用于:
获取所述物体停止移动时,所述施力物所在的位置信息;
基于所述位置信息和预置的世界坐标系的坐标原点,计算出所述施力物相对于所述坐标原点的三维坐标值,得到下一帧的所述施力物的起始坐标位置;
将所述起始坐标位置减去所述最后坐标位置,得到所述偏移向量。
可选的,在本发明第二方面的第二种实现方式中,所述点积模块具体用于:
根据所述指针确定所述物体被推动的方向的向前向量;
基于所述偏移向量和向前向量分别进行单位化处理,得到偏移向量的单位向量和向前向量的单位向量;
调用点积函数对所述偏移向量的单位向量和所述向前向量的单位向量进行点积计算,得到对应的点积值。
可选的,在本发明第三方面的第三种实现方式中,所述位移向量模块具体用于:
根据所述第一变量和起始坐标位置计算所述偏移向量的长度;
将所述长度乘以所述点积值,再乘以所述向前向量的单位向量,得到所述物体的可移动方向上的位移向量。
可选的,在本发明第二方面的第四种实现方式中,所述基于UE4引擎的物体同步装置还包括设置模块,所述设置模块具体用于:
从所述配置属性变量中获取物体移动变量的值,其中,所述物体移动变量的值为所述物体在当前帧之前被施力物推动的历史总推动距离;
将所述物体移动变量的值加上所述偏移向量投影在所述物体对应的可移动方向上的模,得到所述物体的当前总移动距离;
判断所述当前总移动距离是否小于所述物体的预置可移动阈值;
若否,则将所述物体设置为不可移动状态。
可选的,在本发明第二方面的第五种实现方式中,所述同步模块包括:
起始设置单元,用于通过所述UE4引擎中的服务器确定所述UE4引擎中各客户端上对应物体的当前位置,并将所述当前位置设置为起始点;
平滑处理单元,用于将所述位置信息设置为终点,并调用时间线函数和线性插值函数,在所述起始点和所述终点之间进行插值平滑移动处理,得到所述物体的推动结果;
通知单元,用于通过所述服务器,将所述物体的推动结果广播至所述UE4引擎中的所有客户端。
可选的,在本发明第二方面的第六种实现方式中,所述平滑处理单元具体用于:
将所述位置信息设置为终点,并调用所述时间线函数;
将预置时间输入到所述时间线函数中,输出曲线值;
调用所述线性插值函数,并将所述曲线值输入至所述线性插值函数中,所述线性插值函数根据输入的曲线值,设置所述物体在所述起止点和所述终点之间的位置,进行插值平滑移动,得到所述物体的推动结果。
本发明第三方面提供了一种基于UE4引擎的物体同步设备,包括:存储器和至少一个处理器,所述存储器中存储有指令,所述存储器和所述至少一个处理器通过线路互连;所述至少一个处理器调用所述存储器中的所述指令,以使得所述基于UE4引擎的物体同步设备执行上述的基于UE4引擎的物体同步方法。
本发明的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述的基于UE4引擎的物体同步方法。
本发明提供的技术方案中,当施力物与物体碰撞时,判断所述配置属性变量中的指针是否为空,若否,则设置当前碰撞无效,若是,则计算所述施力物碰撞物体的瞬间与碰撞后下一帧的偏移向量;获取物体在可移动方向上的向前向量并计算偏移向量与向前向量的点积值,若点积值大于零,则将偏移向量投影在物体的可移动方向上,得到物体的位移向量;将位移向量施加在物体上,推动所述物体移动,并调用服务器将物体移动后的位置广播至各客户端。本方法通过设置了指针来对各用户的碰撞进行区分,以实现了多用户对同一物体进行碰撞时,屏蔽用户碰撞之间的相互影响干扰,从而简化了对碰撞位移向量的计算过程,提高了计算的精准度,同时通过平滑处理的方式将计算到的位移向量和推动的过程简化处理,减少了服务器在多个客户端之间的同步数据的处理量,避免了数据同步的卡顿现象。
附图说明
图1为本发明实施例中基于UE4引擎的物体同步方法的第一个实施例示意图;
图2为本发明实施例中基于UE4引擎的物体同步方法的第二个实施例示意图;
图3为本发明实施例中基于UE4引擎的物体同步方法的第三个实施例示意图;
图4为本发明实施例中基于UE4引擎的物体同步方法的第四个实施例示意图;
图5为本发明实施例中基于UE4引擎的物体同步方法的第五实施例示意图;
图6为本发明实施例中基于UE4引擎的物体同步装置的一个实施例示意图;
图7为本发明实施例中基于UE4引擎的物体同步装置的另一个实施例示意图;
图8为本发明实施例中基于UE4引擎的物体同步设备的一个实施例示意图。
具体实施方式
本发明实施例提供了一种基于UE4引擎的物体同步方法、装置、设备及存储介质,本发明的技术方案中,当施力物与物体碰撞时,判断所述配置属性变量中的指针是否为空,若否,则设置当前碰撞无效,若是,则计算所述施力物碰撞物体的瞬间与碰撞后下一帧的偏移向量;获取物体在可移动方向上的向前向量并计算偏移向量与向前向量的点积值,若点积值大于零,则将偏移向量投影在物体的可移动方向上,得到物体的位移向量;将位移向量施加在物体上,推动所述物体移动,并调用服务器将物体移动后的位置广播至各客户端。本方法通过设置了指针来对各用户的碰撞进行区分,以实现了多用户对同一物体进行碰撞时,屏蔽用户碰撞之间的相互影响干扰,从而简化了对碰撞位移向量的计算过程,提高了计算的精准度,同时通过平滑处理的方式将计算到的位移向量和推动的过程简化处理,减少了服务器在多个客户端之间的同步数据的处理量,避免了数据同步的卡顿现象。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”或“具有”及其任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
为便于理解,下面对本发明实施例的具体流程进行描述,请参阅图1,本发明实施例中基于UE4引擎的物体同步方法的第一个实施例包括:
101、检测用户当前位置上的物体,并获取所述物体的配置属性变量;
在该步骤中,所述配置属性变量包括用于保存施力物推物体的碰撞框是否有效的指针,比如玩家手上的碰撞框之类的;当指针为空时,表示当前碰撞有效;当指针为非空时,表示当前碰撞无效,也可以理解为是在碰撞的方向上不可被推动。
可以理解的是,本发明的执行主体可以为基于UE4引擎的物体同步装置,还可以是终端或者服务器,具体此处不做限定。本发明实施例以服务器为执行主体为例进行说明。
本实施例应用于虚拟场景中的物体移动,在实际应用中,每个用户都对应有一个客户端,一个物体在每个客户端上都是相同的,当用户操作的施力物推动所述物体后,再通过服务器同步至其他客户端。在实际应用中,通过设置变量的方式,能够避免多个施力物推动物体时计算混乱导致稳定性差的问题。
在实际应用中,所述配置属性变量可以理解为是一个变量的集合,具体包括以下几种参数变量:
1.PrimitiveComponent类型的指针TouchCollision,这个指针用来保存施力物用来推当前可推物体的碰撞框的指针(比如玩家手上的碰撞框之类的);
2.float类型的变量PushMax,这个变量用来表示这个可推物体最多可以推多远,即是物体预设可移动位移;
3.float类型的变量CurPushDistance,这个变量表示当前可推物体已被推的距离,即是所述物体在当前帧之前被施力物推动的历史总推动距离;
4.bool类型的变量bCanPush,这个变量表示当前物体是否可推;
5.Vector类型的变量LastVec,这个变量表示上一帧施力物碰撞框的位置,即是每帧施力物的最后坐标位置;
6.Vector类型的变量OffsetVec,这个变量表示这一帧到上一帧的位移,即是位移向量;
7.Vector类型的变量Rep_Location,Rep_LastLocation,这两个变量分别表示需要同步的可推物体位置和同步时可推物体当前位置。
基于上述的设置,在计算物体的位移向量时,通过上述变量的设置可以直接从变量中获取对应的信息进行计算,得到每个用户推动物体时的精准推动距离。
102、当所述施力物与所述物体碰撞时,判断所述配置属性变量中的指针是否为空;
在本实施例中,所述物体在初始设置时,会在物体的碰撞体上绑定一个碰撞事件(BeginOverlap事件),当施力物移动并与物体碰撞时,该碰撞事件触发,并执行后续的算法流程,施力物与物体碰撞之后会发生重叠现象,这是因为在虚拟环境中,并不能如现实环境中一样,在现实环境中,当物体与物体发生碰撞时,物体与物体之间存在实际接触,一个物体的移动必然导致另一物体的移动,而在虚拟环境中,物体都是虚拟的,并没有发生实际的接触,需要进行流程的计算,先计算施力物的位偏移及其向量,计算物体的位置位移及其向量,并使得物体进行移动。
在本实施例中,所述指针用于保存施力物推物体的碰撞框,当所述指针不为空时,代表所述物体还收到其他施力物的推动,当所述指针为空时,表示所述物体未被其他施力物推动。
103、若所述指针不为空,则确定所述物体存在多个方向上的推动,并将所述施力物与所述物体的当前碰撞设置为无效;
在本实施例中,物体设置有碰撞体,施力物设置有碰撞框,当物体与施力物发生碰撞时,实质是物体的碰撞体和施力物的碰撞框发生碰撞,当该指针不为空时,表明当前存在其他施力物对物体进行推动,为了避免相互干扰,设定所述施力物与物体的碰撞无效,在设定当前用户的施力物无效后,服务器可以通过确定当前推动物体的施力物的客户端进行物体移动的计算。
104、若所述指针为空,则确定所述物体可在当前碰撞的方向上被推动,并记录所述物体被碰撞瞬间所述施力物的坐标位置,根据所述坐标位置更新第一变量,所述第一变量表示当前帧所述施力物推动所述物体的最后坐标位置;
在本实施例中,当指针为空时,表明当前只有该施力物碰撞物体并进行推动,则将配置属性变量中的状态变量设定为真,状态变量用于表示当前物体是否可推,当状态变量为真时,该物体为可推动状态,进而进行后续的算法流程。
在该步骤中,当该碰撞事件发生时,由于算法只在与施力物有关的客户端上进行,可以将发生碰撞事件时的施力物有关的客户端设置为主客户端,每隔一段时间主客户端就将物体的位置发送给服务器,通过服务器对其他客户端进行广播,更新其他客户端上物体的位置。
105、获取所述物体被碰撞后的下一帧的所述施力物的起始坐标位置,并根据所述第一变量和所述起始坐标位置计算所述施力物的偏移向量;
在该步骤中,可以通过两点位置进行施力物偏移向量的计算,设施力物起始坐标位置为(c1,d1,e1),最后坐标位置为(c2,d2,e2),则偏移向量的坐标表示形式为(c1-c2,d1-d2,e1-e2)。
106、获取所述物体在可移动方向上的向前向量,并利用点积函数计算所述偏移向量与所述向前向量的点积值;
在本实施例中,所述物体在初始设置时,会设置一个箭头组件Arrow,该箭头组件表示该物体能够在哪个方向上进行移动,也就是该物体的可移动方向,物体只能够在该可移动方向上进行移动,在该可移动方向上设置有向前向量,该向前向量的方向和模为事先设定好的。
在该步骤中,通过计算得到两个向量的点积值,当该点积值大于0时,说明施力物的偏移向量与向前向量的夹角为锐角,也就是说,施力物向物体的可移动方向进行了推动,代表该物体将发生移动,可以进行后续算法的运算,当该点积值小于或等于0时,说明施力物的偏移向量与向前向量的夹角为钝角或直角,由受力分析可知,当夹角为钝角或直角时,偏移向量不存在投影向前向量方向上的向量,施力物无法对物体进行推动,无法进行后续算法的运算。
107、若所述点积值大于零,则基于投影计算原理计算所述偏移向量在所述物体的可移动方向上的位移向量;
在本实施例中,当偏移向量和向前向量的点积值大于0时,说明施力物向物体的可移动方向进行了移动,需要计算偏移向量在该可移动方向上投影的向量的模,进而推得物体在可移动方向上的位移量。
108、根据所述位移向量控制所述物体向移动,并记录所述物体移动后的位置信息;
在本实施例中,当计算得到位移向量后,将该位移向量输入至预置的物体移动函数中,在实际应用中为AddActorWorldOffset函数,为UE4引擎中自带的函数,能够实现物体向输入的位移向量进行移动,位移向量指示了物体需要进行移动的方向和距离。
109、调用所述UE4引擎中的服务器对所述位置信息进行插值平滑过渡处理后,广播至所述UE4引擎中的所有客户端。
在本实施例中,在每帧计算结束后的同时,每隔一段时间,将当前物体的位置信息通过服务器的远程调用函数同步到服务器上,该时间可以根据需求进行设置,时间越长带宽压力越小,但同时,移动的延迟将会加大,本实施例以每隔0.5秒作为服务器调用远程调用函数的时间间隔,服务器在获取到用户对应客户端的物体的位置信息后,在其他客户端上进行物体的插值平滑移动。
本发明实施例中,当施力物与物体碰撞时,计算所述施力物碰撞瞬间与碰撞后下一帧的偏移向量;获取物体在可移动方向上的向前向量并计算偏移向量与向前向量的点积值,若点积值大于零,则将偏移向量投影在物体的可移动方向上,得到物体的位移向量;将位移向量施加在物体上,推动所述物体移动,并调用服务器将物体移动后的位置广播至各客户端。本方法不使用UE4引擎自带的模拟物理和物理约束的方式实现单方向上的推物体的功能,避免了物体移动时,收到其他物体的干扰,同时实现多个客户端上物体的插值平滑移动。
请参阅图2,本发明实施例中基于UE4引擎的物体同步方法的第二个实施例包括:
201、检测用户当前位置上的物体,并获取所述物体的配置属性变量,所述配置属性变量包括用于保存施力物推物体的碰撞框是否有效的指针;
202、当所述施力物与所述物体碰撞时,判断所述配置属性变量中的指针是否为空;
203、若所述指针不为空,则确定所述物体存在多个方向上的推动,并将所述施力物与所述物体的当前碰撞设置为无效;
204、若所述指针为空,则确定所述物体可在当前碰撞的方向上被推动,并记录所述物体被碰撞瞬间所述施力物的坐标位置,根据所述坐标位置更新第一变量,所述第一变量表示当前帧所述施力物推动所述物体的最后坐标位置;
205、获取所述物体停止移动时,所述施力物所在的位置信息;
206、基于所述位置信息和预置的世界坐标系的坐标原点,计算出所述施力物相对于所述坐标原点的三维坐标值,得到下一帧的所述施力物的起始坐标位置;
在本实施例中,所述世界坐标系是系统的绝对坐标系,在没有建立用户坐标系之前画面上所有点的坐标都是以该坐标系的原点来确定各自的位置的,通过该世界坐标系,能够确定物体的坐标位置。
207、将所述起始坐标位置减去所述最后坐标位置,得到所述偏移向量;
在本实施例中,设施力物的起始坐标位置为(c1,d1,e1),最后坐标位置为(c2,d2,e2),则通过将起始坐标位置减去最后坐标位置,可以得到偏移向量的坐标表示形式,偏移向量的坐标表示形式为(c1-c2,d1-d2,e1-e2)。
208、获取所述物体在可移动方向上的向前向量,并利用点积函数计算所述偏移向量与所述向前向量的点积值;
209、若所述点积值大于零,则基于投影计算原理计算所述偏移向量在所述物体的可移动方向上的位移向量;
210、根据所述位移向量控制所述物体向移动,并记录所述物体移动后的位置信息;
211、调用所述UE4引擎中的服务器对所述位置信息进行插值平滑过渡处理后,广播至所述UE4引擎中的所有客户端。
本发明实施例在上一实施例的基础上,增加了计算施力物位置坐标的过程,在自定义坐标系前,虚拟物体的坐标值主要通过世界坐标系获得,世界坐标系是系统的绝对坐标系,在没有建立用户坐标系之前画面上所有点的坐标都是以该坐标系的原点来确定各自的位置的,通过世界坐标系和坐标系中的坐标原点,能过快速的确定虚拟物体的位置坐标。
请参阅图3,本发明实施例中基于UE4引擎的物体同步方法的第三个实施例包括:
301、检测用户当前位置上的物体,并获取所述物体的配置属性变量,所述配置属性变量包括用于保存施力物推物体的碰撞框是否有效的指针;
302、当所述施力物与所述物体碰撞时,判断所述配置属性变量中的指针是否为空;
303、若所述指针不为空,则确定所述物体存在多个方向上的推动,并将所述施力物与所述物体的当前碰撞设置为无效;
304、若所述指针为空,则确定所述物体可在当前碰撞的方向上被推动,并记录所述物体被碰撞瞬间所述施力物的坐标位置,根据所述坐标位置更新第一变量,所述第一变量表示当前帧所述施力物推动所述物体的最后坐标位置;
305、获取所述物体被碰撞后的下一帧的所述施力物的起始坐标位置,并根据所述第一变量和所述起始坐标位置计算所述施力物的偏移向量;
306、根据所述指针确定所述物体被推动的方向的向前向量;
307、基于所述偏移向量和向前向量分别进行单位化处理,得到偏移向量的单位向量和向前向量的单位向量;
308、调用点积函数对所述偏移向量的单位向量和所述向前向量的单位向量进行点积计算,得到对应的点积值;
在该步骤中,通过公式计算获得偏移向量的单位向量和向前向量的单位向量的点积值,由于两向量都是单位向量,两单位向量的点积值为两单位向量夹角的余弦值,也就是偏移向量和向前向量的夹角的余弦值,当该点积值大于0时,说明施力物的偏移向量与向前向量的夹角为锐角,也就是说,施力物向物体的可移动方向进行了推动,代表该物体将发生移动,可以进行后续算法的运算,当该点积值小于或等于0时,说明施力物的偏移向量与向前向量的夹角为钝角或直角,由受力分析可知,当夹角为钝角或直角时,偏移向量不存在投影向前向量方向上的向量,施力物无法对物体进行推动,无法进行后续算法的运算。
309、若所述点积值大于零,则根据所述第一变量和起始坐标位置计算所述偏移向量的长度;
在该步骤中,偏移向量的长度也就是偏移向量的模,是该施力物当前帧与下一帧之间的距离,通过计算两帧位置的直线距离确定,设起始坐标位置为(c1,d1,e1),第一变量也就是最终坐标位置为(c2,d2,e2),则偏移向量的模的计算公式为:
其中,D为偏移向量的模。
310、将所述长度乘以所述点积值,再乘以所述向前向量的单位向量,得到所述物体的可移动方向上的位移向量;
在该步骤中,将偏移向量的模乘以偏移向量和向前向量的夹角的余弦值,就可以获得偏移向量投影在向前向量方向上的投影向量的模,也就是投影向量的长度,将所述投影向量的模乘以向前向量的单位向量,就得到投影向量,投影向量也就是物体在可移动方向上的位移向量。
311、根据所述位移向量控制所述物体向移动,并记录所述物体移动后的位置信息;
312、调用所述UE4引擎中的服务器对所述位置信息进行插值平滑过渡处理后,广播至所述UE4引擎中的所有客户端。
本实施例在上一实施例的基础上,详细描述了偏移向量投影在所述可移动方向上的模的计算过程,偏移向量投影在所述可移动方向上的模实质上也就是位移向量的模,通过本方法,能够快速计算出位移向量模的长度,在乘以物体可移动方向上的单位向量,即可得到位移向量。
请参阅图4,本发明实施例中基于UE4引擎的物体同步方法的第四个实施例包括:
401、检测用户当前位置上的物体,并获取所述物体的配置属性变量,所述配置属性变量包括用于保存施力物推物体的碰撞框是否有效的指针;
402、当所述施力物与所述物体碰撞时,判断所述配置属性变量中的指针是否为空;
403、若所述指针不为空,则确定所述物体存在多个方向上的推动,并将所述施力物与所述物体的当前碰撞设置为无效;
404、若所述指针为空,则确定所述物体可在当前碰撞的方向上被推动,并记录所述物体被碰撞瞬间所述施力物的坐标位置,根据所述坐标位置更新第一变量,所述第一变量表示当前帧所述施力物推动所述物体的最后坐标位置;
405、获取所述物体被碰撞后的下一帧的所述施力物的起始坐标位置,并根据所述第一变量和所述起始坐标位置计算所述施力物的偏移向量;
406、获取所述物体在可移动方向上的向前向量,并利用点积函数计算所述偏移向量与所述向前向量的点积值;
407、若所述点积值大于零,则基于投影计算原理计算所述偏移向量在所述物体的可移动方向上的位移向量;
408、根据所述位移向量控制所述物体向移动,并记录所述物体移动后的位置信息;
409、从所述配置属性变量中获取物体移动变量的值,其中,所述物体移动变量的值为所述物体在当前帧之前被施力物推动的历史总推动距离;
410、将所述物体移动变量的值加上所述偏移向量投影在所述物体对应的可移动方向上的模,得到所述物体的当前总移动距离;
411、判断所述当前总移动距离是否小于所述物体的预置可移动阈值;
412、若否,则将所述物体设置为不可移动状态;
在本实施例中,在通过游戏引擎自带的物体移动函数对物体进行移动后,将施力物位置变量设置为当前施力物的位置,该变量表示上一帧施力物碰撞框的位置,以便下一帧进行计算,同时还设置有物体移动变量,物体移动变量表示当前物体已被推距离,将该已被推距离加上位移向量的模,用以累积物体总的被推动的距离,并预先设置有移动阈值变量,该变量表示物体最多可推多远,当物体移动变量大于或等于移动阈值变量时,表明该物体以及到达了最大的可推动距离,不可再进行推动,将所述物体设置为不可推动状态。
413、调用所述UE4引擎中的服务器对所述位置信息进行插值平滑过渡处理后,广播至所述UE4引擎中的所有客户端。
本实施例在前面实施例的基础上,增加了对物体从最开始移动到当前时刻的位移累积,并通过预先设置最远推动距离,避免该物体无限地进行移动。
请参阅图5,本发明实施例中基于UE4引擎的物体同步方法的第五个实施例包括:
501、检测用户当前位置上的物体,并获取所述物体的配置属性变量,所述配置属性变量包括用于保存施力物推物体的碰撞框是否有效的指针;
502、当所述施力物与所述物体碰撞时,判断所述配置属性变量中的指针是否为空;
503、若所述指针不为空,则确定所述物体存在多个方向上的推动,并将所述施力物与所述物体的当前碰撞设置为无效;
504、若所述指针为空,则确定所述物体可在当前碰撞的方向上被推动,并记录所述物体被碰撞瞬间所述施力物的坐标位置,根据所述坐标位置更新第一变量,所述第一变量表示当前帧所述施力物推动所述物体的最后坐标位置;
505、获取所述物体被碰撞后的下一帧的所述施力物的起始坐标位置,并根据所述第一变量和所述起始坐标位置计算所述施力物的偏移向量;
506、获取所述物体在可移动方向上的向前向量,并利用点积函数计算所述偏移向量与所述向前向量的点积值;
507、若所述点积值大于零,则基于投影计算原理计算所述偏移向量在所述物体的可移动方向上的位移向量;
508、根据所述位移向量控制所述物体向移动,并记录所述物体移动后的位置信息;
509、通过所述UE4引擎中的服务器确定所述UE4引擎中各客户端上对应物体的当前位置,并将所述当前位置设置为起始点;
在本实施例中,在每帧计算结束后的同时,每隔一段时间,将用户客户端上的物体的位置信息通过服务器的远程调用函数同步到服务器上的同步位置变量上,该时间可以根据需求进行设置,时间越长带宽压力越小,但同时,移动的延迟将会加大,本实施例以每隔0.5秒作为服务器调用远程调用函数的时间间隔,同时,该同步位置变量表示需要同步的物体位置。
510、将所述位置信息设置为终点,并调用所述时间线函数;
511、将预置时间输入到所述时间线函数中,输出曲线值;
512、调用所述线性插值函数,并将所述曲线值输入至所述线性插值函数中,所述线性插值函数根据输入的曲线值,设置所述物体在所述起止点和所述终点之间的位置,进行插值平滑移动,得到所述物体的推动结果;
513、通过所述服务器,将所述物体的推动结果广播至所述UE4引擎中的所有客户端。
在本实施例中,当所述将位置变量设置为本客户端上物体的当前位置之后,播放一个时间线事件,该事件为一个每帧调用的事件,存在时间限制,能够根据设定好的时间输出一个曲线值,设定时间为0.5秒,则输出曲线从0到1,也就是说,当该时间线事件执行到0.25秒时,输出为0.5,执行到0.3秒时,输出为0.6,随着时间输出对应的曲线值,然后通过三维向量的线性插值函数进行插值运算,根据上面时间线事件输出的曲线值设置物体的位置,进而实现物体的平滑移动,在实际应用中,每次同步位置的时候并非直接设置,而是同步下来的时候设置好起点终点,在同步的间隔时间相同的时间执行时间线事件让可推物体从位置变量移动到同步位置变量代表的位置。
下面通过设置完整的配置属性变量来对上述提供的方法进行详细的说明。体实现过程:
首先,这个可推物体的类命名为CanPushActor,继承于基类Actor,可为蓝图类,也可以为C++类,添加几个重要的变量:
1.PrimitiveComponent类型指针TouchCollision,这个指针用来保存施力物用来推当前可推物体的碰撞框的指针(比如玩家手上的碰撞框之类的);
2.float类型变量PushMax,这个变量用来表示这个可推物体最多可以推多远;
3.float类型变量CurPushDistance,这个变量表示当前可推物体已被推的距离;
4.bool类型变量bCanPush,这个变量表示当前物体是否可推;
5.Vector类型变量LastVec,这个变量表示上一帧施力物碰撞框的位置;
6.Vector类型变量OffsetVec,这个变量表示这一帧到上一帧的位移;
7.Vector类型变量Rep_Location,Rep_LastLocation,这两个变量分别表示需要同步的可推物体位置和同步时可推物体当前位置;
以基于UE4引擎的多人游戏的环境物体同步为例,一个专用服务器,和N个客户端,物体被推的位置上要有一个碰撞体Box,可以与施力物的碰撞体碰撞调用Overlap事件,且有一个箭头Arrow组件,表示在哪个方向上可以被推,这段算法在物体的tick函数(UE4引擎自带的每帧调用函数)上执行,且只在其中一个端上计算(服务器上或其他任意一个客户端上),施力物如果跟某个玩家有关联(比如施力物就是手,那持有这只手的玩家就是关联玩家),则算法计算在此客户端执行,否则在服务器上执行,接下来说具体的算法:
在物体的碰撞体Box上绑定一个BeginOverlap事件,当施力物的碰撞框与Box碰撞时触发这个事件,然后判断TouchCollision是否为空指针,如果不为空,则有其他施力物在推,这个施力物无效,如果为空,则将TouchCollision设置为这个施力物的碰撞体,然后将bCanPush设置为true,再将触碰的这瞬间将LastVec设置为TouchCollision的世界坐标,然后在服务器上将这个施力物的Owner设置为施力物关联玩家,这样物体可以在关联玩家的客户端上执行服务器远程调用函数(UE4的多人规则是普通物体没有权限执行服务器远程调用函数,设置为其中一个玩家为Owner之后才有权限)。Tick函数上的计算:如果bCanPush为true且TouchCollision不为空指针,获取TouchCollision的当前世界坐标为临时变量CurLocation,让两帧之间偏移向量OffsetVec设置为CurLocation–LastVec,然后获取箭头Arrow的向前向量ForwardVec,然后将OffsetVec和ForwardVec向量进行单位化然后用dot函数计算两个向量点积,如果点积<=0,说明两个向量是钝角,施力物没有往推的方向上移动,所以后面的计算不需要执行如果点积>0说明两个向量是锐角,施力物确实往推的方向移动了继续计算OffsetVec在ForwardVec上的投影向量,首先计算出OffsetVec投影向量的模,需要先获取OffsetVec当前的长度,然后乘上上面dot函数计算出来的值(因为OffsetVec和forwardVec在dot函数执行前单位化,所以就相当于两向量的夹角余弦值),获取到投影向量的模,这个模再乘上ForWardVec的单位向量,就获取到推这个物体的在箭头方向上的位移向量,然后使用AddActorWorldOffset(UE4自带的函数,使物体往输入的向量位置移动)将物体往前移动,然后把当前的位置设置为LastVec以便下一帧继续计算,再将CurPushDistance加上之前的算出的箭头方向上的位移的模,来累积推的距离,如果CurPushDistance大于等于PushMax,则不再进行推物体移动。在每帧计算的结束之后的同时,每隔0.5秒(时间可根据需求调整,时间越长带宽压力越小,但是移动延迟也会越大)把当前物体的位置用服务器远程调用函数同步到服务器上的Rep_Location,RepLocation是一个OnRepUsing变量,每次在服务器上改变,同步到客户端的时候会调用OnRep_RepLocation函数,这个函数调用的时候(除了关联玩家客户端,其他客户端才执行以下逻辑,因为计算推动距离就是在关联玩家客户端下进行的,所以只有其他客户端和服务器需要平滑同步),将Rep_LastLocation设置为当前的物体的位置,然后播放一个timeline事件(一个每帧调用的事件,有时间限制,根据时间输出一个设定好的曲线值),设定时间0.5秒,输出曲线值从0到1(比如timeline函数执行到0.25秒的时候会输出0.5,执行到0.3秒时候输出0.6,随时间输出对应的曲线值),然后用三维向量的lerp函数进行插值运算,根据输出的曲线值设置物体的位置,就实现了插值平滑同步,每次同步位置的时候并非直接设置,而是同步下来的时候设置好起点终点,在同步的间隔时间相同的时间执行timeline函数让物体从Rep_LastLocation移动到Rep_Location。
本实施例在前实施例的基础上,增加了推动物体对应的客户端将推动后的物体的位置信息通过服务器同步到其他客户端的过程,同时详细描述了其他客户端在接收到所述物体的位置信息后根据本身自带的物体位置信息,进行本客户端上物体的插值平滑移动。
上面对本发明实施例中基于UE4引擎的物体同步方法进行了描述,下面对本发明实施例中基于UE4引擎的物体同步装置进行描述,请参阅图6,本发明实施例中基于UE4引擎的物体同步装置一个实施例包括:
获取模块601,用于检测用户当前位置上的物体,并获取所述物体的配置属性变量,所述配置属性变量包括用于保存施力物推物体的碰撞框是否有效的指针;
判断模块602,用于当所述施力物与所述物体碰撞时,判断所述配置属性变量中的指针是否为空;
配置模块603,用于若所述指针不为空,则确定所述物体存在多个方向上的推动,并将所述施力物与所述物体的当前碰撞设置为无效;
更新模块604,用于若所述指针为空,则确定所述物体可在当前碰撞的方向上被推动,并记录所述物体被碰撞瞬间所述施力物的坐标位置,根据所述坐标位置更新第一变量,所述第一变量表示当前帧所述施力物推动所述物体的最后坐标位置;
偏移向量计算模块605,用于获取所述物体被碰撞后的下一帧的所述施力物的起始坐标位置,并根据所述第一变量和所述起始坐标位置计算所述施力物的偏移向量;
点积模块606,获取所述物体在可移动方向上的向前向量,并利用点积函数计算所述偏移向量与所述向前向量的点积值;
位移向量计算模块607,用于若所述点积值大于零,则基于投影计算原理计算所述偏移向量在所述物体的可移动方向上的位移向量;
记录模块608,用于根据所述位移向量控制所述物体向移动,并记录所述物体移动后的位置信息;
同步模块609,用于调用所述UE4引擎中的服务器对所述位置信息进行插值平滑过渡处理后,广播至所述UE4引擎中的所有客户端。
本发明实施例中,所述基于UE4引擎的物体同步装置通过运行上述的基于UE4引擎的物体同步方法,当施力物与物体碰撞时,计算所述施力物碰撞瞬间与碰撞后下一帧的偏移向量;获取物体在可移动方向上的向前向量并计算偏移向量与向前向量的点积值,若点积值大于零,则将偏移向量投影在物体的可移动方向上,得到物体的位移向量;将位移向量施加在物体上,推动所述物体移动,并调用服务器将物体移动后的位置广播至各客户端。本方法不使用UE4引擎自带的模拟物理和物理约束的方式实现单方向上的推物体的功能,避免了物体移动时,收到其他物体的干扰,同时实现多个客户端上物体的插值平滑移动。
请参阅图7,本发明实施例中基于UE4引擎的物体同步装置的另一个实施例包括:
获取模块701,用于检测用户当前位置上的物体,并获取所述物体的配置属性变量,所述配置属性变量包括用于保存施力物推物体的碰撞框是否有效的指针;
判断模块702,用于当所述施力物与所述物体碰撞时,判断所述配置属性变量中的指针是否为空;
配置模块703,用于若所述指针不为空,则确定所述物体存在多个方向上的推动,并将所述施力物与所述物体的当前碰撞设置为无效;
更新模块704,用于若所述指针为空,则确定所述物体可在当前碰撞的方向上被推动,并记录所述物体被碰撞瞬间所述施力物的坐标位置,根据所述坐标位置更新第一变量,所述第一变量表示当前帧所述施力物推动所述物体的最后坐标位置;
偏移向量计算模块705,用于获取所述物体被碰撞后的下一帧的所述施力物的起始坐标位置,并根据所述第一变量和所述起始坐标位置计算所述施力物的偏移向量;
点积模块706,获取所述物体在可移动方向上的向前向量,并利用点积函数计算所述偏移向量与所述向前向量的点积值;
位移向量计算模块707,用于若所述点积值大于零,则基于投影计算原理计算所述偏移向量在所述物体的可移动方向上的位移向量;
记录模块708,用于根据所述位移向量控制所述物体向移动,并记录所述物体移动后的位置信息;
同步模块709,用于调用所述UE4引擎中的服务器对所述位置信息进行插值平滑过渡处理后,广播至所述UE4引擎中的所有客户端。
可选的,所述偏移向量模块705具体用于:
获取所述物体停止移动时,所述施力物所在的位置信息;
基于所述位置信息和预置的世界坐标系的坐标原点,计算出所述施力物相对于所述坐标原点的三维坐标值,得到下一帧的所述施力物的起始坐标位置;
将所述起始坐标位置减去所述最后坐标位置,得到所述偏移向量。
可选的,所述点积模块706具体用于:
根据所述指针确定所述物体被推动的方向的向前向量;
基于所述偏移向量和向前向量分别进行单位化处理,得到偏移向量的单位向量和向前向量的单位向量;
调用点积函数对所述偏移向量的单位向量和所述向前向量的单位向量进行点积计算,得到对应的点积值。
可选的,所述位移向量模块707具体用于:
根据所述第一变量和起始坐标位置计算所述偏移向量的长度;
将所述长度乘以所述点积值,再乘以所述向前向量的单位向量,得到所述物体的可移动方向上的位移向量。
其中,所述基于UE4引擎的物体同步装置还包括设置模块710,所述设置模块710具体用于:
从所述配置属性变量中获取物体移动变量的值,其中,所述物体移动变量的值为所述物体在当前帧之前被施力物推动的历史总推动距离;
将所述物体移动变量的值加上所述偏移向量投影在所述物体对应的可移动方向上的模,得到所述物体的当前总移动距离;
判断所述当前总移动距离是否小于所述物体的预置可移动阈值;
若否,则将所述物体设置为不可移动状态。
其中,所述同步模块709包括:
起始设置单元7091,用于通过所述UE4引擎中的服务器确定所述UE4引擎中各客户端上对应物体的当前位置,并将所述当前位置设置为起始点;
平滑处理单元7092,用于将所述位置信息设置为终点,并调用时间线函数和线性插值函数,在所述起始点和所述终点之间进行插值平滑移动处理,得到所述物体的推动结果;
通知单元7093,用于通过所述服务器,将所述物体的推动结果广播至所述UE4引擎中的所有客户端。
可选的,所述插值移动单元7092具体用于:
将所述位置信息设置为终点,并调用所述时间线函数;
将预置时间输入到所述时间线函数中,输出曲线值;
调用所述线性插值函数,并将所述曲线值输入至所述线性插值函数中,所述线性插值函数根据输入的曲线值,设置所述物体在所述起止点和所述终点之间的位置,进行插值平滑移动,得到所述物体的推动结果。
本实施例在上一实施例的基础上,详细描述了各个模块具体的功能,并且新增了多个功能模块,其中,通过移动阈值模块,限制物体的移动距离,避免物体无限的移动,同时通过同步模块,能够将物体的位置同步到其他客户端上,保证了各客户端上物体的平滑移动,避免出现卡顿的现象。
上面图6和图7从模块化功能实体的角度对本发明实施例中的基于UE4引擎的物体同步装置进行详细描述,下面从硬件处理的角度对本发明实施例中基于UE4引擎的物体同步设备进行详细描述。
图8是本发明实施例提供的一种基于UE4引擎的物体同步设备的结构示意图,该基于UE4引擎的物体同步设备800可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(central processing units,CPU)810(例如,一个或一个以上处理器)和存储器820,一个或一个以上存储应用程序833或数据832的存储介质830(例如一个或一个以上海量存储设备)。其中,存储器820和存储介质830可以是短暂存储或持久存储。存储在存储介质830的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对基于UE4引擎的物体同步设备800中的一系列指令操作。更进一步地,处理器810可以设置为与存储介质830通信,在基于UE4引擎的物体同步设备800上执行存储介质830中的一系列指令操作。
基于UE4引擎的物体同步设备800还可以包括一个或一个以上电源840,一个或一个以上有线或无线网络接口850,一个或一个以上输入输出接口860,和/或,一个或一个以上操作系统831,例如Windows Serve,Mac OS X,Unix,Linux,FreeBSD等等。本领域技术人员可以理解,图8示出的基于UE4引擎的物体同步设备结构并不构成对基于UE4引擎的物体同步设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
本发明还提供一种计算机可读存储介质,该计算机可读存储介质可以为非易失性计算机可读存储介质,该计算机可读存储介质也可以为易失性计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在计算机上运行时,使得计算机执行所述基于UE4引擎的物体同步方法的步骤。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统或装置、单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种基于UE4引擎的物体同步方法,其特征在于,所述基于UE4引擎的物体同步方法包括:
检测用户当前位置上的物体,并获取所述物体的配置属性变量,所述配置属性变量包括用于保存施力物推动物体的碰撞框是否有效的指针;
当所述施力物与所述物体碰撞时,判断所述配置属性变量中的指针是否为空;
若所述指针不为空,则确定所述物体存在多个方向上的推动,并将所述施力物与所述物体的当前碰撞设置为无效;
若所述指针为空,则确定所述物体仅被所述施力物碰撞,且在当前碰撞的方向上被推动,并记录所述物体被碰撞瞬间所述施力物的坐标位置,根据所述坐标位置更新第一变量,所述第一变量表示当前帧所述施力物的坐标位置;
获取所述物体被碰撞后的下一帧的所述施力物的起始坐标位置,并根据所述第一变量和所述起始坐标位置计算所述施力物的偏移向量;
获取所述物体在移动方向上的向前向量,并利用点积函数计算所述偏移向量与所述向前向量的点积值;
若所述点积值大于零,则基于投影计算原理计算所述偏移向量在所述物体的移动方向上的位移向量;
根据所述位移向量控制所述物体向移动方向进行移动,并记录所述物体移动后的位置信息;
调用所述UE4引擎中的服务器对所述位置信息进行插值平滑过渡处理后,广播至所述UE4引擎中的所有客户端。
2.根据权利要求1所述的基于UE4引擎的物体同步方法,其特征在于,
所述获取所述物体被碰撞后的下一帧的所述施力物的起始坐标位置,并根据所述第一变量和所述起始坐标位置计算所述施力物的偏移向量包括:
获取所述物体停止移动时,所述施力物所在的位置信息;
基于所述位置信息和预置的世界坐标系的坐标原点,计算出所述施力物相对于所述坐标原点的三维坐标值,得到下一帧的所述施力物的起始坐标位
置;
将所述起始坐标位置减去最后坐标位置,得到所述偏移向量。
3.根据权利要求2所述的基于UE4引擎的物体同步方法,其特征在于,
所述获取所述物体在移动方向上的向前向量,并利用点积函数计算所述偏移向量与所述向前向量的点积值包括:
根据所述指针确定所述物体被推动的方向的向前向量;
基于所述偏移向量和向前向量分别进行单位化处理,得到偏移向量的单位向量和向前向量的单位向量;
调用点积函数对所述偏移向量的单位向量和所述向前向量的单位向量进行点积计算,得到对应的点积值。
4.根据权利要求3所述的基于UE4引擎的物体同步方法,其特征在于,
所述基于投影计算原理计算所述偏移向量在所述物体的移动方向上的位移向量包括:
根据所述第一变量和起始坐标位置计算所述偏移向量的长度;
将所述长度乘以所述点积值,再乘以所述向前向量的单位向量,得到所述物体的移动方向上的位移向量。
5.根据权利要求1-4任一项所述的基于UE4引擎的物体同步方法,其特征在于,所述配置属性变量还包括用于记录所述物体被碰撞推动的历史位移的物体移动变量,在所述根据所述位移向量控制所述物体向移动方向进行移动,并记录所述物体移动后的位置信息之后,还包括:
从所述配置属性变量中获取物体移动变量的值,其中,所述物体移动变量的值为所述物体在当前帧之前被施力物推动的历史总推动距离;
将所述物体移动变量的值加上所述偏移向量投影在所述物体对应的移动方向上的模,得到所述物体的当前总移动距离;
判断所述当前总移动距离是否小于所述物体的预置可移动阈值;
若否,则将所述物体设置为不可移动状态。
6.根据权利要求5所述的基于UE4引擎的物体同步方法,其特征在于,所述调用所述UE4引擎中的服务器对所述位置信息进行插值平滑过渡处理后,广播至所述UE4引擎中的所有客户端包括:
通过所述UE4引擎中的服务器确定所述UE4引擎中各客户端上对应物体的当前位置,并将所述当前位置设置为起始点;
将所述位置信息设置为终点,并调用时间线函数和线性插值函数,在所述起始点和所述终点之间进行插值平滑移动处理,得到所述物体的推动结果;
通过所述服务器,将所述物体的推动结果广播至所述UE4引擎中的所有30客户端。
7.根据权利要求6所述的基于UE4引擎的物体同步方法,其特征在于,所述将所述位置信息设置为终点,并调用时间线函数和线性插值函数,在所述起始点和所述终点之间进行插值平滑处理,得到所述物体的推动结果包括:
将所述位置信息设置为终点,并调用所述时间线函数;将预置时间输入到所述时间线函数中,输出曲线值;
调用所述线性插值函数,并将所述曲线值输入至所述线性插值函数中,所述线性插值函数根据输入的曲线值,设置所述物体在所述起始点和所述终点之间的位置,进行插值平滑移动,得到所述物体的推动结果。
8.一种基于UE4引擎的物体同步装置,其特征在于,所述基于UE4引擎的物体同步装置包括:
获取模块,用于检测用户当前位置上的物体,并获取所述物体的配置属性变量,所述配置属性变量包括用于保存施力物推动物体的碰撞框是否有效的指针;
判断模块,用于当所述施力物与所述物体碰撞时,判断所述配置属性变量中的指针是否为空;
配置模块,用于在所述指针不为空时,确定所述物体存在多个方向上的推动,并将所述施力物与所述物体的当前碰撞设置为无效;
更新模块,用于在所述指针为空时,确定所述物体仅被所述施力物进行碰撞,且在当前碰撞的方向上被推动,并记录所述物体被碰撞瞬间所述施力物的坐标位置,根据所述坐标位置更新第一变量,所述第一变量表示当前帧所述施力物的坐标位置;
偏移向量计算模块,获取所述物体被碰撞后的下一帧的所述施力物的起始坐标位置,并根据所述第一变量和所述起始坐标位置计算所述施力物的偏移向量;
点积模块,获取所述物体在移动方向上的向前向量,并利用点积函数计算所述偏移向量与所述向前向量的点积值;
位移向量计算模块,用于在所述点积值大于零时,基于投影计算原理计算所述偏移向量在所述物体的移动方向上的位移向量;
记录模块,用于根据所述位移向量控制所述物体向移动方向进行移动,并记录所述物体移动后的位置信息;
同步模块,用于调用所述UE4引擎中的服务器对所述位置信息进行插值25平滑过渡处理后,广播至所述UE4引擎中的所有客户端。
9.一种基于UE4引擎的物体同步设备,其特征在于,所述基于UE4引擎的物体同步设备包括:存储器和至少一个处理器,所述存储器中存储有指令,所述存储器和所述至少一个处理器通过线路互连;
所述至少一个处理器调用所述存储器中的所述指令,以使得所述基于UE4引擎的物体同步设备执行如权利要求1-7中任一项所述的基于UE4引擎的物体同步方法。
10.一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-7中任一项所述的基于UE4引擎的物体同步方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010459400.4A CN111603773B (zh) | 2020-05-27 | 2020-05-27 | 基于ue4引擎的物体同步方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010459400.4A CN111603773B (zh) | 2020-05-27 | 2020-05-27 | 基于ue4引擎的物体同步方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111603773A CN111603773A (zh) | 2020-09-01 |
CN111603773B true CN111603773B (zh) | 2023-05-26 |
Family
ID=72194579
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010459400.4A Active CN111603773B (zh) | 2020-05-27 | 2020-05-27 | 基于ue4引擎的物体同步方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111603773B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112206515B (zh) * | 2020-10-21 | 2022-10-21 | 深圳市瑞立视多媒体科技有限公司 | 游戏物体状态切换方法、装置、设备及存储介质 |
CN112121410B (zh) * | 2020-10-22 | 2024-04-12 | 深圳市瑞立视多媒体科技有限公司 | 一种基于vr游戏的装备入柜的方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107392888A (zh) * | 2017-06-16 | 2017-11-24 | 福建天晴数码有限公司 | 一种基于Unity引擎的距离测试方法及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9893974B2 (en) * | 2015-10-11 | 2018-02-13 | Microsoft Technology Licensing, Llc | Synchronization of data for colliding bodies |
-
2020
- 2020-05-27 CN CN202010459400.4A patent/CN111603773B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107392888A (zh) * | 2017-06-16 | 2017-11-24 | 福建天晴数码有限公司 | 一种基于Unity引擎的距离测试方法及系统 |
Non-Patent Citations (1)
Title |
---|
虚拟现实中包围盒碰撞检测算法优化研究;陈秋菊;《电脑知识与技术》;20180705(第19期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111603773A (zh) | 2020-09-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111603773B (zh) | 基于ue4引擎的物体同步方法、装置、设备及存储介质 | |
US8467576B2 (en) | Method and apparatus for tracking multiple objects and storage medium | |
KR101677946B1 (ko) | 파티션 확장 방법 및 장치 | |
CN111298443B (zh) | 游戏对象控制方法和装置、电子设备及存储介质 | |
CN111295233A (zh) | 控制杆灵敏度调整 | |
WO2017012361A1 (zh) | 调整虚拟物件在虚拟空间中位置的方法及装置 | |
CA2341965A1 (en) | A method and system for inversion of detail-in-context presentations | |
EP2095326A1 (en) | Interacting with 2d content on 3d surfaces | |
CN112206515B (zh) | 游戏物体状态切换方法、装置、设备及存储介质 | |
CN110956666A (zh) | 运动数据标定方法、装置、终端设备及存储介质 | |
CN112015269A (zh) | 头显设备的显示校正方法、设备及存储介质 | |
CN112206511A (zh) | 游戏中的动作同步方法、装置、电子设备及存储介质 | |
CN111354029A (zh) | 手势深度确定方法、装置、设备及存储介质 | |
CN109491568B (zh) | 鼠标事件处理方法、装置、设备及计算机可读存储介质 | |
WO2017012362A1 (zh) | 调整虚拟物件在虚拟空间中姿态角的方法及装置 | |
CN111275769B (zh) | 一种单目视觉参数的校正方法及装置 | |
CN104750386A (zh) | 一种手势识别方法及装置 | |
CN111632372A (zh) | 虚拟对象的控制方法、装置、设备及存储介质 | |
CN111141217A (zh) | 物体测量方法、装置、终端设备及计算机存储介质 | |
CN114756162B (zh) | 触控系统及方法、电子设备及计算机可读存储介质 | |
CN108762527A (zh) | 一种识别定位方法及装置 | |
CN114849238A (zh) | 动画执行方法、装置、设备及介质 | |
CN111368675A (zh) | 手势深度信息的处理方法、装置、设备及存储介质 | |
CN110930488A (zh) | 鱼体行为模拟方法、装置、设备及存储介质 | |
CN111773725B (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 |