标签:
你可能想制作一款超现实主义基于立体像素的第一人称的跑酷游戏。你正努力制定一个产品计划。哪个环节最耗时?图像?声音?还是关卡设计?我打赌一定是角色控制。我还打赌这会耗费4年半的时间,为什么?
也就是说,每款游戏都有一些值得借鉴的智慧和经验。在此以我自己的亲身经历为例。
制作角色
你是一名程序员,但在处理GIMP的时候也能如鱼得水,你认为自己也算是合格的美工。你可以绘制玩家角色了。
<ignore_js_op>
parkour ninja(from gamasutra)
这个角色的问题就出在于它过于兴奋和有趣。你可以让它更无趣和普通一点吗?使用MakeHuman试试怎样?它可以用模版生成人类角色。
<ignore_js_op>
makehuman(from gamasutra)
这样更好一点了,但还是有一个问题:这是一款第一人称游戏,所以当玩家往下看时,就会看见自己的鼻子。
并且“胸肌”也会显得有点高,会让玩家对自己的性别产生困惑。
<ignore_js_op>
look down(from gamasutra)
你可能就会干脆替换成女性角色。
针对鼻子的问题,你无法移除整个头,因为无头阴影看起来有点不协调。那么削掉整张脸如何?
<ignore_js_op>
face(from gamaustra)
(最后你还是得重新修改模版,雇佣一名美术人员,为第一人称视角和阴影渲染器使用无头模版,但这一点都不好玩。)
令角色移动
你可以使用一个带有简单角色控制器的强大物理引擎,如下图:
<ignore_js_op>
cylinder 1(from gamasutra)
这个角色是一个漂浮在地面上的圆柱体,由一个射线支撑。这样,圆柱体就可以清除一个小障碍,当射线穿过它时,整个仪器就会跳到表面。
由于游戏世界是由立体像素组成,你很快就会遇到这个问题:
<ignore_js_op>
cylinder 2(from gamasutra)
有许多玩家在首次测试中会卡在这里。你可能不会花时间去寻找一个完美的解决方案,而是像这样倒饬一番:
<ignore_js_op>
cylinder 3(from gamasutra)
尽管如此,玩家还是被卡住了。你就会诉诸碰撞处理器让角色远离那些可能产生问题的东西。你还会增添一个垂直位置以便摄像机在角色穿越不平坦的立体元素时正常发挥功能:
<ignore_js_op>
before-after(from gamasutra)
为了更准确地模拟现实,游戏此时不会有空气控制。你最初制定这个决策时,你多少会忘记游戏是一个虚构的立方体世界。
倾听玩家反馈之后,你可能就改变了主意。在现实世界中,跑酷游戏有许多关系到准确跳跃的控制维度。
令游戏有趣
因为跑酷游戏与冲力相关,你要让角色花数秒时间达到其最大速度。这并没错,只是低加速会让角色速度的微调更困难。
你要如何使用不同的加速度则要取决于当前的速度。最终的速度曲线如下:
<ignore_js_op>
time curve(from gamasutra)
这解决了一半的问题,但玩家还是可能用鼠标将摄像镜头转90度,将速度重置为0。
你经过多次受挫的试验,最终采用了点积这一解决方案。它实际上是基于量级衡量两个矢量之间角度的工具。
你用点积找出角色的边对边动量。如果它们处于自己动量方向的垂角,点积就会很大。你可以借此增加速度。长话短说,也就是转向不再阻碍冲力。
让游戏更流畅
还有其他情况可能让玩家丧失冲力,比如撞到墙壁。你试图用低摩擦物质来缓解这一问题,但面对墙壁调整方向总会降低你的速度:
你可以参考Mike Bithell针对这一问题发布的博文。你使用3条射线以及一些向量积计算出一个可以沿着墙体滑行的速度。
之后你又会发现其他头疼的问题。你的立体元素引擎有时候会构建出像这样的立体元素:
<ignore_js_op>
seam(from gamasutra)
由于浮点错误,两个相隔立方体之间会产生缝隙。当角色贴着墙体奔跑并试图向上跳跃时,就会撞到缝隙并立即停下来。
这个问题很容易解决,只要将圆柱体改成胶囊体就行了。没错,我就是花了4年时间才想到这个。
宽容对待玩家
最初,玩家不懂游戏的移动机制。他们认为自己无法从A点走到B点,除非你在背后指给他们看,并解释如何操作。你可能会认为这是因为你还没有推出新手教程所致。
最后,新手教程也到位了。人人都理解了游戏的移动机制,也知道如何操作。但现在又有一个新问题了:他们陷入了行动跟不上计划的困扰。
这里的罪魁祸首就是教程中的一次跳跃误导。它试图告诉玩家如何抓住平台,因为轻轻一跃并不足以成功跨越平台之间的鸿沟。
<ignore_js_op>
jump(from gamasutra)
在你告诉玩家“长摁按钮”之前,玩家可能会失败两三回,而这却有助于他们摸准跳跃时机,尽管这一方式有点粗暴。有趣的是,他们完成这次跳跃后,之后就可以无需长摁按钮地完成其他跳跃。你可能会由此认为玩家很蠢。
部分原因仍要归咎于教程:你让玩家充满信心地跳跃,采取他们之前从不知道的行动。他们并不知道角色会做什么,执行操作需要多长时间。所以你又增加了另一个更初级的教程,让玩家在一个安全的环境中尝试抓住平台边缘。
但还是存在如何抓准时机的问题。这里有双重解决方法:
<ignore_js_op>
success(from gamasutra)
这样可以减少人们在游戏中的受挫感,并令游戏更具趣味性。
美化游戏
在开发过程中,你会遇到一些动画方面的问题。只要使用足够漂亮的程序生成动画,也许人们并不会注意到你拙劣的绘画技巧和纹理问题。
总结
<ignore_js_op>
parkour from gamasutra)
开发者要在角色控制器上投入大量时间才能制作出独一无二的效果。如果你也和我一样,还要做好多次犯错的心理准备。
标签:
原文地址:http://www.cnblogs.com/lihonglin2016/p/4499000.html