GameDesign 板


LINE

之答应过要写的,刚出炉热腾腾的Uncharted 4开发杂记~ 网志版本 http://wp.me/p4mzke-WC 英文原文 http://wp.me/p4mzke-VD 系列清单 http://allenchou.net/my-career/ (强烈建议看网志版本,有精美除错截图唷) Uncharted 4已经发售,终於可以分享我负责开发的部分了 我主要是负责单人模式的夥伴AI、多人模式的战友AI、还有一些游戏逻辑 没有收录到最终游戏的部分和一些琐碎的细工我就略过不提 = 岗位系统 = 在本文开始前,我想要先谈谈我们用来指派NPC移动位置的岗位系统 这个系统的核心逻辑不是我负责的,我写的是使用这个系统的客户端程式 岗位是可行走空间中的离散位置 大部分是用工具自动生成的,也有一些是设计师手动摆置的 基於不同需求,我们设计不同的岗位平分系统 (e.g. 潜行岗位、战斗岗位) 然後我们选择评分最高的岗位,指派NPC移动过去 = 夥伴跟随 = 夥伴跟随系统是继承自The Last of Us 基本概念就是,夥伴在玩家周为找个跟随点 这些可能的跟随点从玩家位置扇状分开 并且要满足以下的路径线段净空条件: – 玩家到跟随点 – 跟随点到前方投射点 – 前方投设点到玩家 攀爬是Uncharted 4的新功能,这是The Last of Us 没有的 为了与现有的跟随系统整合,我利用攀爬岗位让夥伴可以跟着玩家一起攀爬 这个功能比我想像中的还要难搞 单纯根据玩家的攀爬状态来切换夥伴的攀爬状态,结果不甚理想 只要玩家快速在攀爬与非攀爬的状态之间切换,夥伴就会在两个状态间快速跳换 於是我加入了迟滞现象(hysteresis) 只有在玩家切换了攀爬状态,并且保持此状态移动一定距离之後,夥伴才跟进 广泛来说,迟滞现象是个解决行为跳换的好方法 = 夥伴带领 = 游戏中的某些特定场景,我们要让夥伴带领玩家前进 我把The Last of Us的带领系统移植过来 设计师使用spline曲线在关卡中标记他们想让夥伴带领玩家的大致路线 如果有多个带领路线,设计师则会用脚本语言切换主要的带领路线 玩家的位置投射到spline曲线上,再往前延伸设定为带领参考点 当带领参考点超越被标记为等待点的spline曲线控制点,夥伴会前往下个等待点 如果玩家走回头路 夥伴只有在带领参考点离此次推进至最远的等待点一段距离,才会回头 这也是利用迟滞现象来避免行为跳换 我也把动态移动速度调整的功能整合进带领系统 根据夥伴和玩家之间的距离,一些”速度平面”沿着spline曲线放置 夥伴有三种移动模式: 走路、跑步、冲刺 根据玩家撞到的速度平面,夥伴会选择不同的移动模式 另外,夥伴的行进动画速度也会基於玩家距离做微调 目的是避免切换移动模式的时後,有太突然的移动速度变化 = 夥伴掩体共用 = 在The Last of Us中,玩家和夥伴可以在各不离开掩体的状况下重叠 我们称这个为掩体共用 The Last of Us中的Joel伸手跨过Ellie和Tess按在掩体上 看起来很自然,因为夥伴的身型都比玩家娇小 但是同样的动作就不适合身型差不多的Nate、Sam、Sully、和Elena 而且Uncharted 4的游戏节奏较快 让Nate伸手去按掩体只会让动作流畅性打折扣 所以我们决定就单纯让夥伴靠紧掩体,玩家稍微绕弯避开伙伴 我用的逻辑很简单 如果玩家位置往移动方向投射的点,落在夥伴掩体周围的一个方框内 夥伴就会取消目前的掩体行为,并且快速靠紧掩体 = 救星战友 = 我负责多人模式的战友(sidekicks),而救星战友是其中最特别的 单人模式中的NPC,没有一个人的行为跟救星战友一样 他们会复苏被击倒的同伴,也会复制玩家的掩蔽行为 救星战友会尝试复制玩家的掩蔽行为,并且尽量待在离玩家很近的地方 所以当玩家被击倒的时後,他们就可以迅速跑过来复苏 如果玩家有装备救星战友的复苏包额外功能 他们会在采取复苏行动之前,朝被击倒的复苏目标丢复苏包 复苏包丢掷基本上就是延用手榴弹的抛物线净空测试和掷弹动作 只是我把手榴弹换成复苏包而已 = 隐蔽草丛 = 在隐蔽草丛中蹲行也是Uncharted 4才有的新功能 要实作这个功能,我们需要某种能够标记场景的手段 游戏逻辑才可以判断玩家是否身处隐蔽草丛中 我们一开始是让美术人员在Maya中标记背景模型的表面 但美术人员和设计师之间的沟通时间太长,很难频繁改进关卡 於是我们决定用另外一种方法标记隐蔽草丛 我在场景编辑器中的nav mesh增加了隐密草丛的额外tag 让设计师可以直接在编辑器中精准标记隐蔽草丛 有了这个额外的标记 我们也可以用这个资讯来为隐蔽岗位评分 = 感知 = Uncharted 4没有像The Last of Us有聆听模式 所以我们必须要找另外一种方法,让玩家有办法得知附近的敌人威胁 好让玩家不会在未知的敌对环境中产生迷失感 我利用敌人的感知资料,加入了威胁标示 当敌人开始注意(白色)、起疑(黄色)、和发现(橘色)玩家 这些标示会适时地提醒玩家 另外,我在威胁标示开始累积的同时播放背景杂音,以制造张力 当玩家被发现的时候,则播放大声的提示音效 这些音效的安排和做用跟The Last of Us类似 = 调查 = 这是在我们送厂压片前,我负责的最後一个功能 我平常在Naughty Dog是不参加正式会议的 不过在送厂压片的前几个月,我们每周至少开一次会 由Bruce Straley或Neil Druckmann主持,专注在游戏的AI部分 几乎每次开完会之後,调查系统都有需要更动的地方 前前後後总共经历了好几次大改 会让敌人起疑的因素有两种: 玩家和屍体 当敌人起疑了(起疑者),他会抓最近的同伴来一起调查 离起疑点较近的人会成为调查者,另外一个人则是看守者 起疑者可能会视调查者,也有可能是看守者 我们总共有两组不同的对话,适用於两种不同的情况 (“那边有异状,我去看看” vs “那边有异状,你去看看”) 为了让双人调查看起来更自然 我使用了时域错位的技巧,让两人的行动和威胁标示时间点错开 否则两个人的行为完全同步,看起来非常机械式、很不自然 如果调查者发现了屍体,他会通知全部的同伴开始搜索玩家 屍体也会被暂时标示,以让玩家知道敌人为什麽进入警戒 在某些难度下,短时间内连续触发调查,会让敌人的感应力变敏锐 他们会更容易发现玩家,即使玩家躲在隐蔽草丛中也一样 惨烈模式下,敌人永远处於敏锐状态 = 对话动作 = 这也是我负责的最後几个功能之一 对话动作系统负责操控角色,在对话的时候做出一些小动作 像是转头看其他人和肢体动作 之前在The Last of Us 开发人员花好几个月的时间,把整个游戏所有的对话脚本手动加注上对话动作 我们可不想再做一次这种苦工 在这个开发阶段,已经有部分对话脚本被手动加注好对化动作了 我们需要一个泛用型系统,可以帮没有加注对化动作的脚本自动产生对话动作 而我就是负责制做这个对话动作系统 动画师可以调整参数,改变转头速度、转头角度、注视时间、反覆时间等 = 维持吉普车动量 = 开发初期遇到的问题之一,就是马达加斯加的吉普车驾驶关卡 当玩家开车撞到墙或者敌人的载具,玩家的车就会旋转失速以致脱离车队而关卡失败 我使用的解决方法是,当玩家的车撞到墙或者敌方载具的时候 短暂地限制吉普车的最高角速度和线性速度的方向变量 这个简单的方法相当有效,从此玩家就比较不容易旋转失速而导致关卡失败了 = 载具死亡 = 可驾驶的载具是首次在Uncharted 4登场 在这之前,所有的载具都是NPC驾驶、沿着固定轨道行进 我负责载具死亡的部分 摧毁载具有几种方式: 解决驾驶、开枪射车、开车撞飞敌方机车、开车撞敌方吉普车导致旋转失速 基於不同的死法,载具死亡系统会选择载具和乘客的死亡动画来播放 死亡动画会渐渐混入物理引擎控制的ragdoll系统 所以死亡动画会不着痕迹地转换成物理模拟的翻车 当玩家开吉普车撞飞敌方机车的时候 我使用机车在XZ平面上投影的bounding box和碰撞点 来判断要使用四个撞飞死亡动画中的哪一个 至於冲撞使得敌方吉普车旋转失速 我是拿敌方吉普车与预设行进方向之间的旋转量差来比较旋转失速判定阈值 载具播放死亡动画的时候,有机会穿透墙壁 我使用球体投射,从预设位置投射向载具实际位置 如果投射结果是与墙壁碰撞,则把载具稍微往墙壁的法向量移动 不一次完全修正误差,是为了避免太过剧烈的位移 我另外实作了一种特别的载具死亡类型,叫做载具死亡提示 这些死亡提示是动画师和设计师在场景中摆置好的客制化死亡动画 每个死亡提示在载具行进轨道上都有个进入范围 当一个载具在死亡提示进入范围中死亡,则会开始播放死亡提示的特殊死亡动画 之所以开发这功能,一开始是为了2015年E3展的超帅气吉普车死亡动画 https://www.youtube.com/embed/sB0xy74Zrj8?start=475 = 混色用的贝尔矩阵 = 我们想要消除摄影机切入看穿物体的瑕疵,特别是游戏中的各种植物 於是我们决定要让靠近摄影机的像素淡出 使用半透明像素并不是个好主意,因为非常消耗效能 我们使用的技巧,是所谓的混色(dithering) https://en.wikipedia.org/wiki/Dither 使用混色技巧搭配贝尔矩阵(Bayer matrix) 利用一个预先决定的点阵模板来决定哪些像素可以舍弃而不渲染 https://en.wikipedia.org/wiki/Ordered_dithering 结果就是产生半透明的错觉 一开始使用的贝尔矩阵是个8×8矩阵,取自上述的Wikipedia页面 我认为这个矩阵太小,会造成不美观的带状瑕疵 我想要使用16×16的贝尔矩阵,但是网路上都找不到相关资料 於是我试着用逆向工程找出8×8贝尔矩阵的递回特性 光用目测法,我想我应该可以直接解出16×16贝尔矩阵 但是我想要让过程更有趣一点 我写了一个工具,可以生成二的任何次方大小的贝尔矩阵 换到16×16贝尔具阵之後,可以明显看到带状瑕疵的改善 = 爆炸声延迟 = 这个部份我其实没有什麽大贡献,但是我还是觉得值得一提 在2015年E3展示中,Nate和Sully同时接收到高塔传过来的爆炸声和爆炸画面 这是不合理的,因为高塔距离非常远,爆炸声应该会晚一点才被接收到 我在开展前几周指出这点,美术团队後来就在爆炸声之前加上一小段延迟了 https://www.youtube.com/embed/sB0xy74Zrj8?start=50 = 繁体中文在地化 = 直到送厂压片前几周我才开始在游戏中改用繁体中文字幕,而我找到了许多错误 大部分的错误都是英文直译中文,而变成四不像的用语 我认为我没有足够的时间可以单枪匹马全破一次游戏又同时抓出翻译错误 於是我请几个QA部门的人分章节、用繁体中文模式游玩 然後我陆续浏览他们的游玩录制影片 结果这个方法相当有效率 我成功地把我找到的翻译错误建档,而在地化小组也有足够的时间修正翻译 = 结束 = 以上就是我对Uncharted 4开发上值得一提的贡献 希望大家读得愉快 :) -- Web http://AllenChou.net Twitter http://twitter.com/TheAllenChou LinkedIn http://linkedin.com/in/MingLunChou --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 75.82.92.98
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/GameDesign/M.1462940679.A.BE9.html
1F:推 chris38c28: 推 05/11 12:36
2F:推 BSpowerx: 你还要负责翻译除错喔XD 05/11 12:49
3F:推 dreamnook: 05/11 12:54
4F:推 rhox: 推,我猜抓错只是因为身为开发者不忍看到有错而已 05/11 13:27
5F:→ cjcat2266: 没错,有些错误离谱到我觉得卖出去会丢脸 05/11 13:28
6F:推 dklassic: SIET 没有对这款做中文化测试吗@@? 05/11 13:30
7F:推 youtien: 很多厂对这种不必花大钱就可以做好的地方都很忽略。 05/11 13:46
8F:→ youtien: 要不是团队里有本地人,翻译错误就难免了。 05/11 13:46
9F:推 LayerZ: 推 05/11 13:54
10F:推 RobinpeterH: 太厉害了!! 05/11 14:03
11F:推 zseineo: 推 05/11 14:10
※ 编辑: cjcat2266 (75.82.92.98), 05/11/2016 14:21:57
12F:推 aiiueo: 昨天看了别人破关 你那搜索AI让他痛苦万分 哈哈哈 05/11 14:43
13F:推 abucat: 感谢提供自身开发经验 05/11 15:44
14F:推 Kendai: 推 05/11 17:49
15F:推 CiC: 推! 另外文中有小typo「起疑者可能会视调查者」 05/11 19:56
16F:推 eye5002003: 你救了一款大作! 05/11 21:34
17F:推 windzon: 推阿阿阿阿 05/11 21:58
18F:推 laikyo: 推推 05/12 00:39
19F:推 Frostx: 推!! 05/12 10:29
20F:推 leograss: 推推 05/12 11:01
21F:推 ahsdf0910: 推!我很喜欢这款作品啊!我家柜子上有一到三,但是最 05/12 20:17
22F:→ ahsdf0910: 近赶专案还没买四orz 05/12 20:17
23F:推 holymars: 那些看起来是不必花大钱就能作好的部份,对大型组织来说 05/13 01:03
24F:→ holymars: 有时侯是有很多潜在成本的... 05/13 01:04
25F:推 damody: 有分享有推 05/13 08:47
26F:推 seedamen: 继续推~相当立志 05/13 16:54
27F:→ lemmii: push!! 05/13 22:56
28F:推 Ekmund: 深深觉得你超万用...虽说是梦想工作 但从老板角度来说 真 05/13 23:10
29F:→ Ekmund: 的捡到个好员工 05/13 23:10
30F:→ cjcat2266: 还好啦,在ND的每个人都是什麽都做的,没有固定职责 05/14 02:41
31F:推 madeinheaven: 推~!!!! 05/14 23:26
32F:推 w60241: 推推 05/20 11:58
33F:推 v86861062: :D 05/29 00:02
34F:推 snowmilkchen: 推! 06/01 10:33







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP