二次元MMORPG中的3C实践

在研项目:二次元MMORPG移动网游,对标原神、战双帕弥什。

3C,指的gameplay中跟玩家体验密切相关的三个因素,分别是Charactor(角色)、Control(控制)、Camera(摄像机)。

结合实战项目来说一下我的一些经验~

Character

一般玩家在主城中会始终跟随一个固定主角,而在战斗中会有几个角色可切换。

Control

PC端有鼠标和键盘两种输入,键盘WSAD控制行进,也可以用鼠标滑动摇杆控制行进;移动设备只能通过触屏滑动摇杆控制行进。

战斗中:Ai模式下会自动控制角色移动;玩家可滑屏旋转高空镜头;可花瓶选取大招攻击范围和方向。

Camera

主城或战斗中,最基础要实现的摄像机是“跟随相机”,实现方法是在角色GO上绑一个“跟随GO”,摄像机与“跟随GO”之间有一个相对位置和旋转偏移,每帧更新摄像机的位置。

对于主城,基于“跟随相机”,还需要实现滑屏全方位(接近360°)旋转摄像机观察主角,做法是把主角当成球的中心,摄像机绕着球面旋转,旋转角度则可根据滑动偏移量算出

yaw/roll/pitch,再插值移动。

对于战斗,我们会分若干镜头,在unity中通过虚拟相机切换。这些镜头包括:

入场镜头:战斗正式开始前,我方角色和地方角色摆好阵,这时会有一个摄像机从场景远处逐渐移动到侧面并看向双方整体,这个移动的过程目前是用timeline实现的,更灵活的方法应该是可以自动生成,策划可动态配置入场方式。

追背镜头:入场完成后,镜头会插值到“追背镜头”,追背镜头即位置跟着角色背后,且总是望向角色(或角色和攻击目标的中点)。由于有的角色会有快速位移、旋转位置的情况,或者单纯的“跟背”会导致镜头晃动频繁,引起玩家感官不适,于是优化成“跟随怪物与角色连线的延长线上的某点”,而不是总在角色背后。

求攻击目标和角色连线后的旋转角度方法:攻击点-角色 得到方向向量,再根据向量求出旋转角度。

Vector3 angle = Quaternion.LookRotation(_enemy.position - _follow.position).eulerAngles;
transform.eulerAngles = _backLook.Update(transform.eulerAngles, angle);

高空镜头

相对于追背的另外一种摄像机模式,跟随并以45°角从高空看向地面。分为两种,一种是 总是看向特定角色,另一种是看向战场所有实体的中心点(类似于unity官方的坦克战)。

第二种的实现方法:一算出所有实体综合的中心点;找到离中心点最远的实体;算出半径;由于镜头总是45°,半径的长度即是镜头的高度和z值偏移。

注意:unity官方的坦克战计算中心点的方式是把所有实体的坐标加起来平均,对于摄像机观测来说效果并不好,因为当实体扎堆的时候中心点会偏向扎堆那头。比较好的方法是坐标点逐个两两平均。

这里有个小技巧,即不要只是加一个摄像机到GO上,否则随着旋转角度变化需要实时计算位置;而是拆分成父子2个GO,父GO负责跟随位置,子GO负责旋转即可。

 

 大招镜头:角色放大招时会切到角色正面特点,并且慢速播放;待播放完以后会切回追背镜头或高空镜头。

胜利镜头:战斗胜利以后,播放某个角色的胜利动作,播放完后才弹出胜利界面。

posted @ 2022-08-29 11:37  银龙背上的骑士  阅读(322)  评论(0编辑  收藏  举报