在3d游戏中经常会用到镜头跟随效果,这次我们就来实现它!
阅读本文需要一些的基本知识:
效果预览如下(可调远近上下/弹性跟随):
相机跟随的原理就像是,你暗中跟随观察(尾随)你心仪的对象(Object)。
既然是观察,就要与对象保持一定的距离。
为了不被对象发现,我们观察的位置和对象的朝向有关。
当然,你要看到对象,你的眼睛方向一定得看着对象吧,这就是视口方向。
原理图
针对我们要达到的效果,需要定义好以下几个变量。
最终我们需要算出以下几个玩意儿:
求相机的位置分两步:
计算位置
中文式伪代码如下:
对象到中间点的向量 = -1 * 对象前方向 * 相机的水平距离
中间的坐标 = 对象到中间点的向量 + 对象点坐标
中间点到相机的向量 = 对象上方向 * 相机的垂直距离
相机坐标 = 中间点坐标 + 中间点到相机的向量
旋转角度可以通过视口朝向和上方向得出。
旋转角度的求法
伪代码如下:
前向向量 = 对象坐标 - 相机坐标
旋转角度 = 旋转API(前向向量的归一化, 对象上向量)
需要注意的是,在 Cocos Creator
中相机朝向和节点旋转的角度是相反的,所以前向量的方向要取反向。
摄像机节点
我们还可以给相机添加一个弹性跟随的效果。
计算过程如下:
弹簧模型
弹簧简易模型受两个因素影响:
为此我们可以定义想要的弹力系数
和阻力系数
。
结合起来的计算位置的伪代码如下:
理想位置 = 计算理想位置()
相对距离的向量 = 理想位置 - 当前位置
加速度 = - 相对距离*弹力系数 - 当前速度*阻力系数
当前速度 = 当前速度 + 加速度*间隔时间
当前位置 = 当前位置 + 当前速度
还可以用其他的方法去更新位置:
积分法
关于弹簧系数的关系参考:
弹簧模型系数
位置!距离!旋转!弹簧!
以上为白玉无冰使用 Cocos Creator 3.0 preview-1
实现 "弹性跟随相机!"
的技术分享。欢迎三连(点赞/在看/留言/分享)支持!
FFF
= 专注(focus)、反馈(feedback)以及纠正(fix it)!
《游戏编程算法与技巧》
《大学物理(核心知识)》
本文分享自 Creator星球游戏开发社区 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!