腾讯游戏开发精粹
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.1 引言

在2015年参与的某跑酷类游戏中,策划者不满足于普通的、平直的跑动场景,想要尝试一些有趣的、弯曲的跑动场景,例如滑轨、过山车跑道等。对于当时的手游跑酷类游戏而言,跑动实际是沿着一条一维的直线路径移动的,跳跃等垂直方向的移动也是以这个路径为基准的,而水平方向左右移动可以被看作是路径的切换,那么自然而然想到用曲线路径代替直线路径来引导角色的跑动,并将简单的物理运动转换到曲线路径上。

结合游戏侧的需求,对这样一个曲线路径系统有如下要求:

(1)路径布置简单,最直观的就是布置路点。

(2)修改具有局部性,修改一个路点只会影响上、下游。

(3)曲线至少具有C1连续性,满足基本的光滑需求。

(4)两个路点间的曲线可以是异面曲线,等同于可以自由控制邻接路点曲线的方向。

(5)与曲线相关的计算要尽量简单,尽量少地进行迭代计算。

要求(1)意味着曲线要过每一个控制点,所以排除了Bezier曲线。要求(2)则排除了Natural曲线这类会影响全局的曲线,剩下可选的流行曲线有Catmull-Rom[2]。在要求(5)中,希望曲线的计算尽量简单,特别是长度的计算和与平面求交的计算,这两类计算和各种逻辑操作相关,而曲线形式简单也会让一些迭代的计算量变小。所以最终并没有采用三次曲线,而是选择在两个控制点之间生成二次样条,两条二次曲线的拼接点用方程确定,并不需要手工编辑。另外,在路径编辑的过程中,模仿Catmull-Rom引入了Cardinal类曲线的构造方式以方便操作。