网站建设计划
计划:目前本站的内容只是个人笔记的冰山一角,预计24年秋招前完成本站v1.0的搭建,届时会将所有技术点以大纲的形式罗列给(包括本站链接,外部链接,书籍链接等等,加油,冲冲冲!)
由于博客网站不利于团队协作,后续重要的内容均会放到本人搭建的Wiki:https://wiki.icongbao.com/zh/home(Wiki暂时对所有人开放访问)
说明:
- 技术栈的文章算是补充而非全部,如果官方已经有详细文档本站不会上传;如果是付费的内容,考虑到原作版权,只会酌情上传
- 先以Unity为主,由于时间和能力有限,UE了解的还是不够多,暂时搁置
部分作品实机:
- Unity3d《滑雪派对》:https://www.bilibili.com/video/BV1By4y1j7yE?t=389.5
- UE5《蜀道行》:https://www.bilibili.com/video/BV1Sv4y1w71U
日常随笔
随笔不参考任何资料,主打一个真实
优化的几个大方向 20240620
来源:面试提问
- 合批。一次性尽可能多的处理数据。如ood,各种合批技术,打图集。
- 分治。大问题化多个子问题。如复杂计算分摊到多帧去做。
- 复用。复用已经计算的结果或已生成的对象,减少不必要的内存分配或拷贝。如对象池。
- 预计算。游戏运行前离线计算好一些值,如IBL,球谐光照等。
- 牺牲部分美术效果。最简单粗暴,也是本人开发时最常用的,如砍特效,减面数,lod等等。
以上均为个人头脑风暴,如有雷同,实属巧合。
拆解游戏系统的思路 20240425
来源:面试提问
遗憾,面试程序岗,第一次遇到让我做游戏拆解的,最近被一些八股什么的洗脑了,当时确实被问懵了,只回答了一个有限状态机拆状态,然后也不知道怎么展开。但面试完静下心来想了想,顿悟(纯个人观点,如有雷同实属巧合)。在手机写了这些,感觉蛮有意义的,遂搬到博客上来。其实如果站在玩家的角度去粗略拆解一款游戏真不算太难,至少不会没得说。以今天面试官问的空洞骑士拆解为例:
写在前面:在拆解之前,一定要先找切入点!不然这种开放性问题没有接触过特别难答,所以本文切入点就是玩家视角(主题),但偏程序思维(约束)。分为5个点:输入->状态->渲染->交互和反馈->收获
第一个拆的一定是输入。没有按键输入整个游戏就没有办法推进,卡在主界面发呆吗?不过我们抛开最基础的UI交互按键为例,回到游戏。空洞骑士里不同的键位有不同的作用,同时还有分长短按,但没有连段。不管怎么做,第一件事肯定是画一个导图,把按键交互确定。最后解决办法:这些都可以使用Unity新版input system解决。
状态。这里也可以说成输入数据或输入数据流。不过输入想真正与游戏系统发生交互,可以通过事件实现。再往深的说,可以使用状态机或行为树实现对事件的处理。个人还是偏向战斗部分用行为树,对于打断行为比较好定义。对于游戏流程,这类比较固定的状态偏向使用状态机,根据用户上下文对输入进行一系列处理,给出反馈。比如从奔跑到瞬移,跳跃按攻击会跳劈,技能引导等等。
- 补充:在设计早期可以只给出关键性状态以及切换流程,快速测试游戏可行性。后期可以丰富状态,比如单纯的瞬移拿到了一些物品,就可以获得无敌瞬移,还有二段跳等等。这些都是从基础状态衍生而来的。后期随着状态的复杂,就必须通过配表的方式来承载对象数据。状态的数据可以分为静态和动态,静态是指直接从表读取的,动态可能随玩家、场景变化的。这些数据会影响状态的切换和效果。
渲染。一个状态仅仅是代码层面的数据,真正反馈到玩家身上的绝对不是冷冰冰的数据,而是画面,声音这些感官体验。因此一个状态的触发、过渡,往往会伴随着角色的动画,音效、特效等等,这些一定要符合玩家认知,符合审美需要。例如你按了普通攻击,可能会哈的一声(音效),人物会往前面挥剑(动画),可能有刀光(特效)等等,这都是应该考虑的。
交互和反馈。当行为发生后,下一步就是交互,如果砍的是空气,可能不会有过多反馈,但如果命中敌人,就需要仔细考虑了(即使是霸体的敌人可能也会产生溅血等反馈)。非战斗交互可能就是开宝箱或解密,NPC交互等,具体情况具体分析,相对容易些。下面以战斗交互为例进一步拆分,可以分成角色反馈、画面反馈和UI反馈:
角色反馈:遵循着音效、动画、特效三原则。如果玩家攻击敌人,可能会有一个刀砍肉的音效,怪物也可能有受击音效,同时根据打击韧性和怪物自身韧性可能会播放不同程度的受击动画,甚至断尾(怎么感觉不在聊空调骑士了哈哈哈)。敌人受击之后血液的飞溅,刀光变粗等等,这些特效都会极大程度提升玩家体验。这里是以玩家砍怪为例,如果被砍也是一样的思路去分析。而且这是单机游戏,如果多人的话,核心思想也是一样的。
画面反馈:可以引入画面抖动,后处理等手段提升交互体验,这里没有标准答案,全凭经验和积累啊。
UI反馈:对于敌人可能是扣血也可能是阵亡、爆金币等等,对于自身可能是扣能量等等。这一些通常会用插值,UI动效去反馈给用户。可以用典型的MVVM思想,为每个动态变化的数据绑定上相应的事件,这样只需要修改值,剩下的就交给回调去做吧!
- 小结:交互在基础实现上主要依赖于射线检测或包围盒检测,对性能要求高的场合,也可以根据各种输入手动计算。想一步提升交互的质量,那就必须得好好学习游戏的3C了(Camera、Character、Controller),最好的方式就是模仿,找大神资料,找各种游戏逐帧分析它镜头的变化、角色的变化和交互的手感。后续我也会多实践,加油!
最后,当然是收获啦。从玩家按键,到一系列状态的转移,再到交互和反馈,我称为是一次交互循环,后面的一切用户体验都是基于这个循环的。怪物的扣血、阵亡,宝箱的打开,任务的完成,甚至是一小步的移动,这都是收获。它都会影响着玩家下一轮的循环、交互,直到游戏结束。玩家最终会因为交互而产生收获,可能是积极(打败一个大boss),也可能是消极的(抽卡一直歪,大非酋就是我啦),但总之一定有收获。同时,不要以为消极的收获没有用,如果什么boss都随便过,什么五星都随便出,那游戏还有什么意思!(后半段可以去掉[doge],对了这里一直聊抽卡,是因为抽卡确实目前国产游戏的主流)。最后的最后,还有很重要的一点要补充,那就是优化。即使循环多么好,如果是渣优化,前面的依旧是徒劳。但优化这个东西需要权衡,如果游戏本身没有多大性能问题,你去硬钻这个牛角尖吧,感觉会比较浪费时间。总之游戏之路很长,需要很多积累,既要有足够的广度,也要有足够的深度,还要有追求新技术的动力。
可能分析有点脱离空洞骑士了,但很多思想是想通的。好的游戏能把循环设计的环环相扣,引人入胜,让玩家进入心流,沉浸感拉满。差的游戏通常是上面的循环做得太差,要不然就是没有创新,照搬其他游戏的设计思路。当然,现在游戏类型也差不多定型了,创新其实会比较困难,因此“缝合”成为了一种趋势。难道真的没有很眼前一亮的作品吗?有的,可能国内比较少吧~
本文整体主要以偏系统设计的角度切入,每一个小的切入点又是站在玩家视角。以上均为个人理解,因此肯定还有很多细节没有考虑到,希望日后能继续补充。像联网游戏还有后端,那还得额外考虑网络通信;像开放世界,需要考虑天气系统,场景的管理,资源的加载,寻路等等。(诶,等等好像跑题了,打住打住!)
不知不觉就写了这么多,希望以后再被问到类似问题不会无从下手了吧。