背景
在游戏开发中,动画元素的移动轨迹直接影响游戏的表现力。
传统的线性移动虽然实现简单,但往往显得机械僵硬。成熟游戏普遍采用贝塞尔曲线来实现流畅自然的移动效果,但实现起来较为复杂。
于是我想做一个好用的控件,方便按照贝塞尔曲线移动元素。
我的要求非常简单:
-
使用方便
只需指定终点,控件就可以按照起点和终点计算出一条二阶曲线(二阶已经足够),并使绑定的元素 node 按照计算出的轨迹运动。
-
控件支持各种调参
可以通过调整控制点的一些属性,实现自定义曲线,并带有一定的随机性。
基于此两点目的,我开始了控件制作。
实现原理
说到贝塞尔曲线,相信不少人和我一样会想起高中数学课本。但别担心,我们已经把复杂的数学原理封装成了简单易用的接口!
简单来说,一条二阶贝塞尔曲线由三个关键点决定:
-
P0:起点 -
P2:终点 -
P1:控制点(决定曲线的弧度)
为了方便理解,我们还需要加入几个参数:
-
Q0:P0 到 P1 上的动点 -
Q1:P1 到 P2 上的动点 -
B(t):Q0 到 Q1 的动点
Q0 和 Q1 在 P0P1 和 P1P2 上是按比例移动的,当 Q0 移动到 P0P1 的中点时,Q1 也恰好移动到 P1P2 的中点, Q0 移动到 P1 时,Q1 也恰好移动到 P2 。
由于 B(t) 是 Q0 到 Q1 的动点,B(t) 的轨迹,就是以 P0 为起始点,以 P2 为终止点。

于是,主体思路就是:
-
当拿到目标坐标后,先按照控制点参数,计算出这次贝塞尔曲线的控制点。
-
由于有了起点 P0,控制点 P1,终点 P2,就可以算出 P0P1+P1P2,可以粗略认为是总路程(其实总路程比该值小),通过 路程/速度,就可以算轨迹运动时间。
-
然后在 update 的循环中,不断计算贝塞尔曲线当时点的位置(当然,还需要考虑旋转,这里需要计算切线来调整角度,还要考虑角度是否平滑过渡等)。
使用方法
虽然实现起来比较复杂,但最终使用起来却非常简单。
操作如下:
-
一拖:将 BezierMove 组件拖入目标节点 -
二设:调用 BezierMove.moveTo 方法,传入终点坐标即可 -
可以设置其他参数,来实现自定义与随机性配置,例如: -
控制点偏移率 -
控制点随机系数 -
控制点方向 -
缓动函数 -
运动速度 -
角度平滑系数
可以调整的参数如下图所示。

控件优势
1. 智能路径系统
-
智能路径生成引擎 -
自动构建二阶贝塞尔曲线 -
实时动态锚点修正 -
支持 2D 节点运动 -
完美适配 Spine/DragonBone 动画:只需设定终点坐标,自动生成符合物理直觉的优雅曲线
2. 参数级操控系统
-
40+预设缓动函数(弹性/回弹/脉冲等) -
智能速率适配(FixSpeed模式) -
轨迹曲线高度可控可随机(控制点偏移率,随机系数,方向) -
可视化曲线路径

3.开发者友好
-
即插即用架构、组件化设计、3.8 全版本兼容、源码级控制 -
包含对应 Demo、源码效果,以及视频教学,方便使用者快速上手
资源获取
-
Cocos Creator 版本:3.8.6
-
资源获取:
https://store.cocos.com/app/detail/7647
-
演示视频:
https://www.bilibili.com/video/BV1yiVzzMEXi
-
教学视频:
1. 飞剑:https://www.bilibili.com/video/BV1yKVpz9EzQ
2. 飞星1:https://www.bilibili.com/video/BV1qnVpz5Eo4
3. 飞星2:https://www.bilibili.com/video/BV1RCVHzzE9y
-
在线体验:
1. 桌面网页版 Demo:https://cocos-resources.dawnwindstudio.top/bezier-move
2. 手机网页版 Demo:https://cocos-resources.dawnwindstudio.top/bezier-move-mobile
写在最后
游戏开发中,细节决定成败,希望这个控件可以帮你轻松实现优雅的游戏动画效果。
有任何问题或建议,欢迎在评论区留言交流!
欢迎关注 Cocos 官方公众号,第一时间获取更多实用信息与技术干货。

