欢迎光临散文网 会员登陆 & 注册

动作游戏中的攀爬的实现

2023-04-23 20:53 作者:莫末陌寞  | 我要投稿

首先说明在xy平面上的移动、旋转方式。

对于攀爬在xy平面的实现,首先要克服的困难是图上红色箭头标识的两种拐角。

以下将其称之为“崎岖旋转”

看下图,我将右边的复杂地形抽象为了左边,右边的地形虽然复杂,但是本质上实现对90°角的旋转是可以通用到其他角的。

通过射线实现的方式总是难以适配重叠的模型,这是很致命的。

对于这种难点的克服,我采取的手段是使用两个小球模拟“手”,对岩石进行抓取。

两个小绿球是——以物体中心为圆心,半径为r的圆上的点。

通过将两个小绿球作为攀爬者的子物体,使用相对坐标,我们的圆公式就可以不去关心圆心,使用x^2+y^2=r^2。

当已知x和r时,对可求y^2,两个球分别代表的就是当有一个x时,通过y^2求得的(x,y)(x,-y)位置。

详细解释是:

我们通过圆公式定义了一个Position限制,使得点只能在圆形轨道上运行。

通过取样这两个在轨道上的点,得到物体当前正确的面朝向。

攀爬对象面朝向 = (左手向量与世界forward夹角+右手向量与世界forward夹角)/2

如果是单纯的对碰撞发生处的法相取样,对于这种直角,会出现90-45-90的僵硬过渡。

如上得到,模拟左右手的两个小球,得到两个小球的位置(x1,y1)、(x2,y2)。

左球和右球的x并不相等,我们要做的事情就是旋转“攀爬者”,使得左右两个球的x相等。

这里的(x1,y1)、(x2,y2)两个小球作为子物体,相对父物体“攀爬者(圆心)”的位置,是相对位置。

当旋转“攀爬者”时,保持两个小球世界位置不动,由于父物体旋转导致的坐标系的旋转,这个(x1,y1)、(x2,y2)也会随之改变。

当“攀爬者”的旋转 = “攀爬对象面朝向 = (左手向量与世界forward夹角+右手向量与世界forward夹角)/2”时,就是(x1,y1)、(x2,y2)变为(x,y)(x,-y)的时候,此时攀爬者将有一个正确的面朝向。

这里的左手、右手向量是通过世界绝对位置计算的,在“攀爬者”旋转时,要保持两个小球的世界位置不动。

原理是这样的,在实际开发中要使用插值来保证对象在旋转中也可以随便移动。




动作游戏中的攀爬的实现的评论 (共 条)

分享到微博请遵守国家法律