36

研究方法分享:以研究王者荣耀的拖屏功能为例-腾讯游戏学院

 5 years ago
source link: http://gad.qq.com/article/detail/287684
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
玩过王者荣耀游戏的人应该知道“拖屏”操作,由于手机MOBA游戏设备的限制,玩家的视野被限制在了英雄四周,无法通过像PC一样很方便地使用鼠标拖屏查看战场其他位置的情况。所以王者采用了一种“拖屏”的操作,让镜头暂时和英雄脱钩,可以实现跨屏观察的效果。
那么,如果我们也要设计一套和王者类似手感的拖屏操作,要如何进行呢。我们无法获得王者的底层代码,也不可能打电话去天美让她们告知详细的数值,那就只能采用“笨方法”,自己用尺子量吧!

测量之前,先提几个问题:
1、王者的镜头灵敏度是可以设置的,假设数值就是从0%~100%,期间的速度的增减,是线性的吗?还是一开始在不同的档位有不同的设定?
2、镜头拖动的数值,和那些外部参数有关,例如设备分辨率、DPI等?

可以凭借直觉自己先回答一下:
1、是线性的,从程序代码复杂程度和维护难度角度考虑,没必要弄多个“段位”自找麻烦,但也不排除有特别精细的设定。
2、有关系,但应该不会涉及太多参数相关。

准备好了,那就掏出我的量天尺吧。
5bc454f3e30c9.png
不好意思拿错图了,是这个工具:
5bc455af24f0b.png
由于手机像素密度高、屏幕小,我们可不能真的掏出手机用游标卡尺量,可以采用手机模拟器+PMeter(测量屏幕像素的工具),虽然我们知道电脑上的1个像素不一定等于手机上的1个像素,但至少比例关系肯定是一样的,所以可先在电脑上进行测量。

先将灵敏度调到0%,进入游戏
5bc455eca41f7.png

把量天尺放在屏幕上,大概在红框框范围内(具体位置无所谓,能够把屏幕拖动就行):
5bc455fdb2a5d.png
记得拖动之前要截图一张,然后开始向右拖动,拖出一段距离后,再截一张图片:
5bc4560bd01ce.png
时刻关注量天尺的刻度,最好是整数的地方停止拖动并截图

然后把两张截图放到PS里面进行对比,我们想要的数值是——量天尺移动若干距离时,游戏内的摄像机移动的距离是多少。
既然要对比,要就要找好参照物。最好的参照物就是英雄的血条,血条比较平整,而且不会有变化,适合比较精准地重合定位:
5bc4562da93da.png
我们可以看到,由于是3D的场景,无论是人物还是场景,会有微小的变化,但是不管摄像机怎么移,血条总是能保持平面(实际上所有的2DUI都是这样)

这样我们就得到了0%的设置下,X轴移动的数值。我们再用同样的方法,设置成100%的灵敏度,X轴移动的数值。理论上,我们可以获取从0%~100%中间区间任意一个设置值的数值。

现在我们就可以回答“1、王者的镜头灵敏度是可以设置的,假设数值就是从0%~100%,期间的速度的增减,是线性的吗?”这个问题,可以看我量的一组数据:
5bc4563edf1ee.png
把这个数值可视化之后发现:
5bc4564dde139.png
几乎完全拟合成一条直线,那么说明每1%,镜头速度的增量是固定的,那就印证了刚刚第一条的猜想。

我们也可以用模拟器,设置不同的DPI或分辨率,再进行测量:
5bc45685a63a7.png
过程就略过,结论就是拖屏的参数和DPI无关,分辨率影响具体的数值(显而易见),但都呈现线性关系。这样一来,第二个问题也有了答案。

但由于加入了分辨率这个影响维度,我们发现不同分辨率下,数值的变化率(斜率)是不一样的:
5bc45719bf218.png
那就表示我们无法获得分辨率对应摄像机移动速度的比例的精准关系,我们采集了多个分辨率数值,都无法获得比较显著的相关性:
5bc457294a63d.png

对这一点也有点心理准备的,因为摄像机在3D游戏中不是纯粹的以像素为单位移动,而是以“码”作为单位移动(玩过unity引擎的应该知道),换算方式不太一样,以一个纯2D的视角想进行精确测量确实有困难。

既然做不到精确测量,那我们就用“近似法”去解决,我们只要保证主流分辨率1920*1080的拖屏手感和王者大致一致就好了。

经过一系列细节调整,我们现在的拖屏手感基本可以保持和王者的一致:
5bc45768dce14.png
50%的灵敏度下,可以从自家泉水区域拖动至地图中间位置

5bc45775642f0.png
100%的灵敏度下,可以从自家泉水区域拖动至对方泉水区域


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK