多啦A梦飞车
类型:多人竞速
视角:3d
乐趣点:多人联机,赛车竞速,探索场景乐趣
时间:2015-2018
个人职责:
1、参与原生DEMO研发制作
2、参与游戏基础框架的讨论研发,优化工作
3、负责游戏物理系统实现优化
4、负责游戏内摄像机语言功能
5、整个游戏生命周期期维护
6、负责游戏服务器的部分功能的商讨和研发
7、开发动画编辑工具。特效装配工具
8、优化工作流,制作管理工具:动画状态机相关,动画导入,日志管理等
9、SDK 接入集成以及文档撰写
模块划分:
1、新手引导
引导分为两个部分来实现的,局内和局外,局内需要处理游戏的暂停过度状态,和不同的输入方式。局外只需要处理按钮的点击流程。
局内引导
1、按住引导,上图是左转,需要持续按住左方向摇杆一段时间,如果只是轻点,需要在手指抬起时候再次展示提示UI,此时的状态切换处理是难
点。
2、多按键按住引导
上图是漂移教学,需要同时按住方向键和漂移键,如果单纯只按住一边则不能正确触发进程,此类型和上面的按住类型相似,但是多了一个案件,难点在于多了一个输入维度,需要处理好类型之间的重复代码。
局外引导
局外引导主要是控制玩家点击,同时分为强制引导章节和开放式引导章节。
区别在于强制引导章节在游戏前期,刚进入游戏之后整个游戏流程都在引导的控制之下,顺序进行。
而到了后期某个新的功能页面开放之后,会触发单独的开放式引导。
这个系统的难点在于,点击聚焦遮罩的制作使用,点击之后的穿透检测按钮,并且触发按钮。
2、局内物理
- 车身结构
车身碰撞体构成:
1、主体车身Capsule
这个碰撞体主要负责碰撞物理,例如和墙壁的碰撞检测,和地面的碰撞检测,车与车之间的碰撞检测
模拟碰撞物理,在车身受到撞击时候,使用脚本获取碰撞方向,碰撞点,根据车当前的速度,计算得出碰撞后赛车的运动状态,并且在碰撞发生之后的一个物理帧中设置完毕
2、道具检测 Box
这个碰撞体是一个触发器,只负责检测功能触发
例如:
1、攻击类道具命中
2、道具盒子捡取
3、进入加速带
4、进入飞行启动带
- 引擎动力
引擎动力,负责前进速度的值
引擎动力 = 1 则可以前进,加速度则由赛车本身属性决定
引擎动力 = -1 则后退,后退速度为固定值(正式版本没有此功能)
引擎动力 = 0 则停留在原地,例如被道具定身时候
- 最高速度
由赛车属性决定,可以到达的最大 MPH(英里每小时)值。赛车在引擎动力为1的情况下,如果当前速度高于 最高速度 值则速度会下降,如果当前速度低于 最高速度 则继续加速。
处于冲刺状态时候,则当前最大 MPH 值会突破变得更高
- 冲刺状态
冲刺有多种分类,加速带,道具,漂移氮气,每种冲刺有自己独立的
加速度,
增加的最大MPH值,
类型枚举
冲刺状态属于一种状态 buff
- 转向动力
转向动力,负责转向角速度的值
引擎动力 = 1 则左转
引擎动力 = -1 则右转
引擎动力 = 0 则执行
转向的最大角速度和角加速度则由赛车的本身属性决定
- 漂移
漂移的实现是由,动画 + 物理模拟 + 轮胎印 组成。
在按住漂移按键和任意方向键后,触发漂移,此时按住左方向则向左飘,按住右方向键则右飘。
漂移的动画会使得车身倾斜姿态,同时出现的轮胎印,则表现出正在烧胎的状态。
而物理模拟则是这个设计的精髓,处于漂移状态时候,车身会在漂移的反方向施加一个横向推力,模拟漂移失控。
- 竹蜻蜓
竹蜻蜓是针对多啦A梦 IP 专门设计的玩法模式,在进入专门的飞行区域后,所有赛车将会暂时消失,取而代之的是多啦A梦的道具,竹蜻蜓。此时玩家处于飞行模式,飞行模式依然是可以操控的,只不过漂移无法使用,只可以控制方向。
竹蜻蜓模式的实现主要是使用路径点的方式,加之移动范围的横向计算。
- 反重力
在游戏中,很多地图是可以反重力设计的,类似于,上墙。
反重力的实现需要用到一个重力过度触发器,通过这个触发器之后,赛车所收到的重力方向就会改变,例如进入上墙重力触发器后,重力方向就会变为垂直于墙面的方向。而进入下墙跳台之后,会有另外一个重力触发器使得赛车的重力恢复到正常的 Y 轴负方向。
- 全地形
反重力的设计,再加上地图场景的特殊设计就可以变成类似太空星球的全地形。赛车在这类特殊赛代上可以在开在道路的两面,可以悬在头顶行驶等等。
- 地面吸附
在开发过程中,多次发现赛车会出现离地的情况,特别是地面上有碰撞体接缝,水平起伏等情况。在曲面上行驶过程中更是出现抖动和无法爬坡的情况。
针对这个情况,我使用了地面吸附的方式来解决。地面吸附难点在于,在一般情况下赛车需要保持地面吸附,但是在高台处比如说跳台,或者起跳时候需要可以离地而起。
- 高处落下
处理从高处落向地面也是一个难点,从高处落下赛车由于重力加速度的作用,使得赛车下落速度过快,很容易穿透地面碰撞体,在实验过程中,使用过加厚加多地面碰撞体的方法,均没有彻底解决穿透问题。最后使用了速度预测的方法,才彻底解决。
3、镜头语言
镜头语言在这个游戏中绝对是最重要的部分。竞速游戏赛车前进速度很快,所以镜头一旦处理的不好,很容易影响玩家体验。
秉承
玩家无法发现的镜头,是最好的镜头。
这一原则。这个部分的功能经历了很多轮迭代。
从最初的 FixedUpdate 跟随,到延迟跟随点,到摄像机置入子节点跟随,
从固定旋转角,到插值延迟旋转角跟随,
期间还发现了很奇怪的屏幕“卡帧”现象。
最后,通过大量的实验使用了最关键的补针设计,才解决了。
到现在不知道有没有现成的摄像机插件解决这部分问题。
(后期大多数游戏开发都没有重镜头语言)
4、动画
动画结构分为,赛车动画,角色动画
赛车模型上会有设计给角色绑定的绑定点,角色置入赛车绑定点归零本地坐标即可安装完毕。
角色动画和赛车动画开发过程中的最大难点在于,不下20个赛车的动画控制文件,10个左右的角色动画控制文件,在修改维护上是一个很大的麻烦。
针对这个点,我专门开发了动画控制文件批量生成绑定工具,使用一个基础模板文件(template)拷贝生成新的文件,然后获取到对应不同模型的动画置入新的动画文件中。
至此调试过后的动画控制文件终于可以方便的批量应用到所有赛车和角色。
角色动画和赛车动画都使用了 动画分层的技术,比如在使用道具时候,角色的手臂层会播放投掷道具的动画,但是此时在基础层玩家是播放idle的。
5、SDK
当时的版本接入了国内的一些SDK,用于数据测试。