虚拟现实中腰带跟随玩家的移动方法、装置和计算机设备与流程

文档序号:33561753发布日期:2023-03-22 14:54阅读:39来源:国知局
虚拟现实中腰带跟随玩家的移动方法、装置和计算机设备与流程

1.本发明涉及虚拟现实的游戏技术领域,特别是涉及一种虚拟现实中腰带跟随玩家的移动方法、装置、计算机设备和存储介质。


背景技术:

2.一般虚拟现实的游戏中只有玩家头部和手部的捕捉,这个时候要把腰带呈现出来,一般直接跟随着玩家头部移动旋转,但是这样效果并不是很好。因为玩家在使用腰带的时候,例如拿腰带工具,拿腰带上的枪之类的动作,都是低头的。低头时候玩家头部的中心位置会比身体前倾一段距离,所以低头的时候腰带的位置会前倾,不满足虚拟现实中游戏设置的效果,虚拟现实中腰带跟随玩家的移动方式不满足游戏设置需求。


技术实现要素:

3.本发明的目的在于克服现有技术的不足,提供了一种虚拟现实中腰带跟随玩家的移动方法、装置、计算机设备和存储介质,能够在玩家移动过程玩家低头看腰带时,腰带会在玩家头部后方一点的腰部附近而不是玩家头部的垂直下方,满足虚拟现实中游戏设置的效果,提高虚拟游戏的体验效果。
4.为了解决上述中至少一个技术问题,本发明实施例提供了一种虚拟现实中腰带跟随玩家的移动方法,所述方法包括:
5.获取所述玩家的头部当前旋转的向前向量,根据所述当前向量与水平面的法向量获取到当前玩家低头的插值,获取所述腰带往后移的最大距离,将所述插值与所述最大距离进行乘积运算,得到所述腰带需要往后移的第一距离;
6.获取当前玩家头朝向在水平面上投影向量,将所述投影向量转化为单位向量,将所述单位向量乘以所述第一距离,得到所述第一距离的位移向量,获取所述玩家的头部的当前位置的坐标,将所述当前位置的坐标减去所述位移向量,得到所述腰带即将移动到的第二距离的坐标;
7.获取所述腰带当前的第一位置坐标,将所述第二距离的坐标减去所述第一位置坐标得到距离差,获取腰带位移移动速度系数,根据所述腰带位移移动速度系数与所述距离差得到所述腰带的当前速度;
8.获取上一帧的时间,将所述当前速度与所述上一帧时间进行相乘,得到第三距离,获取所述腰带当前帧的位移坐标,将所述当前帧的位移坐标与所述第三距离进行累加,得到所述当前的腰带的更新位置,所述腰带基于所述更新位置进行移动。
9.在其中一个实施例中,根据所述当前向量与水平面的法向量获取到当前玩家低头的插值,包括:
10.将所述当前向量与水平面的法向量进行点积,根据所述点积得到夹角;
11.将90度减去所述夹角的度数,得到差值,将所述差值再除以90度,得到所述当前玩家低头的插值。
12.在其中一个实施例中,所述方法还包括:
13.当所述夹角的度数大于90度时,将所述夹角的度数设置为90度。
14.在其中一个实施例中,所述根据所述腰带位移移动速度系数与所述距离差得到所述腰带的当前速度,包括:
15.计算所述距离差的平方值,将所述平方值与所述所述腰带位移移动速度系数进行相乘,得到当前帧腰带的速度,根据所述当前帧腰带的速度得到所述腰带的当前速度。
16.在其中一个实施例中,所述根据所述当前帧腰带的速度得到所述腰带的当前速度,包括:
17.获取所述腰带的最小速度;
18.将所述最小速度与所述当前帧腰带的速度进行比较,将所述最小速度与所述当前帧腰带的速度中的最大速度作为所述腰带的当前速度。
19.在其中一个实施例中,所述方法还包括:
20.获取所述腰带的第一旋转和所述玩家的第二旋转,获取所述第一旋转和所述第二旋转的角度差;
21.获取腰带位移移动旋转系数,将所述角度差与所述腰带位移移动旋转系数的乘积,得到所述腰带的旋转速度;
22.通过上一帧的时间,将所述上一帧的时间乘以所述腰带的旋转速度,得到所述腰带的旋转值;
23.获取所述腰带的当前旋转,将所述当前旋转加上所述腰带的旋转值,得到所述腰带的更新旋转,所述腰带根据所述更新旋转在移动中进行旋转。
24.在其中一个实施例中,所述将所述角度差与所述腰带位移移动旋转系数的乘积,得到所述腰带的旋转速度,包括:
25.将所述角度差与所述腰带位移移动旋转系数的乘积,得到乘积值;
26.获取所述腰带最小旋转速度;
27.获取所述乘积值与所述腰带最小旋转速度中的最大值,将所述最大值作为所述腰带的旋转速度。
28.一种虚拟现实中腰带跟随玩家的移动装置,所述装置包括:
29.第一获取模块,用于获取所述玩家的头部当前旋转的向前向量,根据所述当前向量与水平面的法向量获取到当前玩家低头的插值,获取所述腰带往后移的最大距离,将所述插值与所述最大距离进行乘积运算,得到所述腰带需要往后移的第一距离;
30.第二获取模块,用于获取当前玩家头朝向在水平面上投影向量,将所述投影向量转化为单位向量,将所述单位向量乘以所述第一距离,得到所述第一距离的位移向量,获取所述玩家的头部的当前位置的坐标,将所述当前位置的坐标减去所述位移向量,得到所述腰带即将移动到的第二距离的坐标;
31.第三获取模块,用于获取所述腰带当前的第一位置坐标,将所述第二距离的坐标减去所述第一位置坐标得到距离差,获取腰带位移移动速度系数,根据所述腰带位移移动速度系数与所述距离差得到所述腰带的当前速度;
32.第四获取模块,用于获取上一帧的时间,将所述当前速度与所述上一帧时间进行相乘,得到第三距离,获取所述腰带当前帧的位移坐标,将所述当前帧的位移坐标与所述第
三距离进行累加,得到所述当前的腰带的更新位置,所述腰带基于所述更新位置进行移动。
33.另外,本发明实施例还提供了一种计算机设备,其包括:存储器、处理器及存储在存储器上并可在处理器上运行的应用程序,处理器执行应用程序时实现上述任一实施例方法的步骤。
34.另外,本发明实施例还提供了一种计算机可读存储介质,其上存储有应用程序,应用程序被处理器执行时实现上述任一实施例方法的步骤。
35.在本发明实施例中,通过实施上述方法,获取玩家的头部当前旋转的向前向量,根据当前向量与水平面的法向量获取到当前玩家低头的插值,获取腰带往后移的最大距离,将插值与最大距离进行乘积运算,得到腰带需要往后移的第一距离;获取当前玩家头朝向在水平面上投影向量,将投影向量转化为单位向量,将单位向量乘以第一距离,得到第一距离的位移向量,获取玩家的头部的当前位置的坐标,将当前位置的坐标减去位移向量,得到腰带即将移动到的第二距离的坐标;获取腰带当前的第一位置坐标,将第二距离的坐标减去第一位置坐标得到距离差,获取腰带位移移动速度系数,根据腰带位移移动速度系数与距离差得到腰带的当前速度;获取上一帧的时间,将当前速度与上一帧时间进行相乘,得到第三距离,获取腰带当前帧的位移坐标,将当前帧的位移坐标与第三距离进行累加,得到当前的腰带的更新位置,腰带基于更新位置进行移动。因此,能够在玩家移动过程玩家低头看腰带时,腰带会在玩家头部后方一点的腰部附近而不是玩家头部的垂直下方,满足虚拟现实中游戏设置的效果,提高虚拟游戏的体验效果。
附图说明
36.图1是本发明实施例中的一种虚拟现实中腰带跟随玩家的移动方法的流程示意图;
37.图2是本发明实施例中的一种虚拟现实中腰带跟随玩家的移动装置的结构示意图;
38.图3是本发明实施例中的计算机设备的结构组成示意图。
具体实施方式
39.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
40.本发明实施例提供了一种虚拟现实中腰带跟随玩家的移动方法,如图1所示,该一种虚拟现实中腰带跟随玩家的移动方法包括以下步骤:
41.s102,获取所述玩家的头部当前旋转的向前向量,根据所述当前向量与水平面的法向量获取到当前玩家低头的插值,获取所述腰带往后移的最大距离,将所述插值与所述最大距离进行乘积运算,得到所述腰带需要往后移的第一距离。
42.在一实施例中,根据所述当前向量与水平面的法向量获取到当前玩家低头的插值,包括:将所述当前向量与水平面的法向量进行点积,根据所述点积得到夹角;将90度减去所述夹角的度数,得到差值,将所述差值再除以90度,得到所述当前玩家低头的插值。
43.优选地,所述方法还包括:当所述夹角的度数大于90度时,将所述夹角的度数设置为90度。
44.首先说明的是,在本发明中,虚拟现实的游戏中已知玩家头部的旋转和位置。本发明的技术算法核心有两个,一种是延时缓慢移动旋转,一种是低头往后位移。本发明在游戏的虚幻引擎中设置腰带类toolbelt。toolbelt上具备以下的核心成员变量和成员函数:
45.float变量beltmovespeed,腰带位移移动速度系数,因为腰带的位移速度与腰带和玩家当前的距离有关,这个距离乘上这个系数就是当前速度,可以根据实际需求效果进行调整。
46.float变量beltmoveminspeed,腰带最小速度,当距离无限接近玩家的时候,速度也会无限小,所以设置最小速度避免无限缓慢移动
47.float变量beltdistance,腰带往后移的最大距离,玩家头朝向与水平面的夹角为0时为腰带位移为0,玩家头朝向与水平的夹角为90度时,腰带往后的位移达到最大为这个beltdistance。
48.float变量beltheight,一个腰带高度的系数,与玩家当前高度相乘得出当前腰带的高度应该在哪。
49.float变量beltrotspeed,与beltmovespeed同理,区别是这个是旋转系数
50.float变量beltrotminspeed,腰带最小旋转速度
51.float变量rotchangeminangle,腰带最小需要旋转的角度,当玩家旋转值根腰带旋转值的角度差小于这个值,则不需要进行旋转
52.函数updatetransform,在tick函数(虚幻引擎自带的帧函数,每帧调用一次)中调用,不断更新腰带的位置旋转,里面处理所有主要的算法。
53.函数gettargetlocationandrotation,获取目的位置与旋转,因为移动算法运用的是延时的,当玩家移动到哪并非一瞬间过去,而是会有一个移动过去的过程,所以使用这个函数去获取到目的位置旋转,在用算法让腰带位移旋转过去目的点。
54.具体地,首先获取到目的的位置和旋转,腰带需要移动到的位置和旋转到的旋转值。调用gettargetlocationandrotation函数,在gettargetlocationandrotation函数里,首先获取玩家头部当前的位置旋转,目的旋转直接返回当前玩家头部旋转即可,目的位移则需要进行一些处理。目的位移的具体处理为:获取到玩家头部当前旋转的向前向量,即玩家头的朝向,然后与水平面的法向量(0,0,-1)进行点积获取到夹角的cos值,然后用反三角函数计算出这个角度的度数。如果这个角度值大于90时就视为90。因为大于90度时玩家为抬头状态,此时玩家看不到自己的腰带,和头往前时一样的处理即可。进而,90度减去这个度数,然后再除以90度,即可获取到当前玩家低头的插值。当头低到最低时为1,头往前时为0。这个插值乘上beltdistance得出需要往后移的距离。也即是,得到所述腰带需要往后移的第一距离。
55.s104,获取当前玩家头朝向在水平面上投影向量,将所述投影向量转化为单位向量,将所述单位向量乘以所述第一距离,得到所述第一距离的位移向量,获取所述玩家的头部的当前位置的坐标,将所述当前位置的坐标减去所述位移向量,得到所述腰带即将移动到的第二距离的坐标。
56.具体地,获取到当前玩家头朝向在水平面上投影向量,然后转化为单位向量,乘上
上面得到的需要后移的距离,即为第一距离的位移向量,头当前的位置减去这个第一距离的位移向量就是gettargetlocationandrotation函数需要返回的目的位置。目的位置即为所述腰带即将移动到的第二距离的坐标。
57.s106,获取所述腰带当前的第一位置坐标,将所述第二距离的坐标减去所述第一位置坐标得到距离差,获取腰带位移移动速度系数,根据所述腰带位移移动速度系数与所述距离差得到所述腰带的当前速度。
58.在一实施例中,所述根据所述腰带位移移动速度系数与所述距离差得到所述腰带的当前速度,包括:计算所述距离差的平方值,将所述平方值与所述所述腰带位移移动速度系数进行相乘,得到当前帧腰带的速度,根据所述当前帧腰带的速度得到所述腰带的当前速度。
59.在一实施例中,所述根据所述当前帧腰带的速度得到所述腰带的当前速度,包括:获取所述腰带的最小速度;将所述最小速度与所述当前帧腰带的速度进行比较,将所述最小速度与所述当前帧腰带的速度中的最大速度作为所述腰带的当前速度。
60.具体地,updatetransform函数里,首先获取腰带当前的第一位置坐标,将第二距离的坐标减去第一位置坐标得到距离差。进而,将得到的距离差进行平方,再乘上beltmovespeed,得出当前速度。
61.进而,将当前速度与beltmoveminspeed进行比较,数值比较大的那个值为这一帧真正的当前速度。
62.s108,获取上一帧的时间,将所述当前速度与所述上一帧时间进行相乘,得到第三距离,获取所述腰带当前帧的位移坐标,将所述当前帧的位移坐标与所述第三距离进行累加,得到所述当前的腰带的更新位置,所述腰带基于所述更新位置进行移动。
63.具体地,调用getworlddeltaseconds函数获取上一帧的时间,当前速度乘上一帧的时间获得到第三距离,获取腰带当前帧的位移坐标,将当前帧的位移坐标与第三距离进行累加,得到当前的腰带的更新位置。其中,使用虚幻引擎自带的getactorlocation函数获取到腰带当前帧的位移坐标。
64.通过实施上述方法,获取玩家的头部当前旋转的向前向量,根据当前向量与水平面的法向量获取到当前玩家低头的插值,获取腰带往后移的最大距离,将插值与最大距离进行乘积运算,得到腰带需要往后移的第一距离;获取当前玩家头朝向在水平面上投影向量,将投影向量转化为单位向量,将单位向量乘以第一距离,得到第一距离的位移向量,获取玩家的头部的当前位置的坐标,将当前位置的坐标减去位移向量,得到腰带即将移动到的第二距离的坐标;获取腰带当前的第一位置坐标,将第二距离的坐标减去第一位置坐标得到距离差,获取腰带位移移动速度系数,根据腰带位移移动速度系数与距离差得到腰带的当前速度;获取上一帧的时间,将当前速度与上一帧时间进行相乘,得到第三距离,获取腰带当前帧的位移坐标,将当前帧的位移坐标与第三距离进行累加,得到当前的腰带的更新位置,腰带基于更新位置进行移动。因此,能够在玩家移动过程玩家低头看腰带时,腰带会在玩家头部后方一点的腰部附近而不是玩家头部的垂直下方,满足虚拟现实中游戏设置的效果,提高虚拟游戏的体验效果。
65.在一实施例中,s108之后,还包括:获取所述腰带的第一旋转和所述玩家的第二旋转,获取所述第一旋转和所述第二旋转的角度差;获取腰带位移移动旋转系数,将所述角度
差与所述腰带位移移动旋转系数的乘积,得到所述腰带的旋转速度;通过上一帧的时间,将所述上一帧的时间乘以所述腰带的旋转速度,得到所述腰带的旋转值;获取所述腰带的当前旋转,将所述当前旋转加上所述腰带的旋转值,得到所述腰带的更新旋转,所述腰带根据所述更新旋转在移动中进行旋转。
66.在一实施例中,所述将所述角度差与所述腰带位移移动旋转系数的乘积,得到所述腰带的旋转速度,包括:将所述角度差与所述腰带位移移动旋转系数的乘积,得到乘积值;获取所述腰带最小旋转速度;获取所述乘积值与所述腰带最小旋转速度中的最大值,将所述最大值作为所述腰带的旋转速度。
67.然后旋转跟位移一样,但是旋转不进行平方。具体地,获取到腰带旋转和玩家旋转的角度差。其中,使用getacatorrotation函数获取到玩家当前的旋转。因为腰带需要永远保持水平,所以这个角度差是投影到水平面上的角度差,然后角度差乘上beltrotspeed就得到了腰带的旋转速度,然后乘上getworlddeltaseconds获取的时间,就得到旋转值,腰带当前的旋转加上这个旋转值就更新好了腰带旋转,每一帧都是如此反复的处理,腰带的位移旋转就完成了。
68.其中,如果角度差乘上beltrotspeed得出的旋转速度比腰带最小旋转速度小,则后面使用这个最小速度而非计算得到的腰带的旋转速度。也即,则后续使用腰带最小旋转速度乘上getworlddeltaseconds获取的时间,得到旋转值。
69.因此,本发明实现了在玩家移动的过程中,腰带会延时缓慢的跟随玩家,随着靠近而减速,当玩家低头看腰带的时候,腰带是会在头部后方一点的腰部附近而不是头的垂直下方,体验效果更加好。
70.在一实施例中,本发明还提供一种虚拟现实中腰带跟随玩家的移动装置。如图2所示,该装置包括:
71.第一获取模块22,用于获取所述玩家的头部当前旋转的向前向量,根据所述当前向量与水平面的法向量获取到当前玩家低头的插值,获取所述腰带往后移的最大距离,将所述插值与所述最大距离进行乘积运算,得到所述腰带需要往后移的第一距离;
72.第二获取模块24,用于获取当前玩家头朝向在水平面上投影向量,将所述投影向量转化为单位向量,将所述单位向量乘以所述第一距离,得到所述第一距离的位移向量,获取所述玩家的头部的当前位置的坐标,将所述当前位置的坐标减去所述位移向量,得到所述腰带即将移动到的第二距离的坐标;
73.第三获取模块26,用于获取所述腰带当前的第一位置坐标,将所述第二距离的坐标减去所述第一位置坐标得到距离差,获取腰带位移移动速度系数,根据所述腰带位移移动速度系数与所述距离差得到所述腰带的当前速度;
74.第四获取模块28,用于获取上一帧的时间,将所述当前速度与所述上一帧时间进行相乘,得到第三距离,获取所述腰带当前帧的位移坐标,将所述当前帧的位移坐标与所述第三距离进行累加,得到所述当前的腰带的更新位置,所述腰带基于所述更新位置进行移动。
75.关于一种虚拟现实中腰带跟随玩家的移动装置的具体限定可以参见上文中对于一种虚拟现实中腰带跟随玩家的移动方法的限定,在此不再赘述。上述一种虚拟现实中腰带跟随玩家的移动装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述
各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
76.本发明实施例提供的一种计算机可读存储介质,所述计算机可读存储介质上存储有应用程序,该程序被处理器执行时实现上述实施例中任意一个实施例的一种虚拟现实中腰带跟随玩家的移动方法。其中,所述计算机可读存储介质包括但不限于任何类型的盘(包括软盘、硬盘、光盘、cd-rom、和磁光盘)、rom(read-only memory,只读存储器)、ram(random access memory,随即存储器)、eprom(erasable programmable read-only memory,可擦写可编程只读存储器)、eeprom(electrically erasable programmableread-only memory,电可擦可编程只读存储器)、闪存、磁性卡片或光线卡片。也就是,存储设备包括由设备(例如,计算机、手机)以能够读的形式存储或传输信息的任何介质,可以是只读存储器,磁盘或光盘等。
77.本发明实施例还提供了一种计算机应用程序,其运行在计算机上,该计算机应用程序用于执行上述中任意一个实施例的一种虚拟现实中腰带跟随玩家的移动方法。
78.此外,图3是本发明实施例中的计算机设备的结构组成示意图。
79.本发明实施例还提供了一种计算机设备,如图3所示。所述计算机设备包括处理器302、存储器303、输入单元304以及显示单元305等器件。本领域技术人员可以理解,图3示出的设备结构器件并不构成对所有设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件。存储器303可用于存储应用程序301以及各功能模块,处理器302运行存储在存储器303的应用程序301,从而执行设备的各种功能应用以及数据处理。存储器可以是内存储器或外存储器,或者包括内存储器和外存储器两者。内存储器可以包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦写可编程rom(eeprom)、快闪存储器、或者随机存储器。外存储器可以包括硬盘、软盘、zip盘、u盘、磁带等。本发明所公开的存储器包括但不限于这些类型的存储器。本发明所公开的存储器只作为例子而非作为限定。
80.输入单元304用于接收信号的输入,以及接收用户输入的关键字。输入单元304可包括触控面板以及其它输入设备。触控面板可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板上或在触控面板附近的操作),并根据预先设定的程序驱动相应的连接装置;其它输入设备可以包括但不限于物理键盘、功能键(比如播放控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。显示单元305可用于显示用户输入的信息或提供给用户的信息以及终端设备的各种菜单。显示单元305可采用液晶显示器、有机发光二极管等形式。处理器302是终端设备的控制中心,利用各种接口和线路连接整个设备的各个部分,通过运行或执行存储在存储器303内的软件程序和/或模块,以及调用存储在存储器内的数据,执行各种功能和处理数据。
81.作为一个实施例,所述计算机设备包括:一个或多个处理器302,存储器303,一个或多个应用程序301,其中所述一个或多个应用程序301被存储在存储器303中并被配置为由所述一个或多个处理器302执行,所述一个或多个应用程序301配置用于执行上述实施例中的任意一实施例中的一种虚拟现实中腰带跟随玩家的移动方法。
82.另外,以上对本发明实施例所提供的一种虚拟现实中腰带跟随玩家的移动方法、装置、计算机设备和存储介质进行了详细介绍,本文中应采用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思
想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1