Unity 性能调优技术集锦

性能调优,一直是游戏上线之前的很重要的一个环节, 游戏帧率过低,手机发烫, 低端机上跑不起来等, 这些都需要来做优化,今天我们来给大家分享Unity做性能调优的指导思想与解决方案。

这里有个unity学习交流小组点击可以直接加入,一起学习交流吧

 

性能调优的指导思想

接触过很多刚做性能调优的小伙伴,他们做性能调优最大的问题一开始就通过猜测,推断来做性能调优,缺乏一个做性能优化的系统指导流程, 导致优化的效果不好。性能调优首先要分析问题,定位问题,证明是这块有问题后再对症下药,着手优化,拿出解决对策。没有证明问题之前,不要随便动手优化,就像医生,看病做手术前先做检查。不确定问题就随便开刀,那是极不负责任的做法。

大家可以回想一下,当帧率低的时候,你马上就是去查Drawcall,去优化降低Drawcall,这里我想说,做性能优化之前,先定位,证明确实是Drawcall的问题导致性能下降,才动手。如何来定位问题,找出引起问题的代码或物体呢?接下来给大家介绍一些方法。

(1)对比法

例如, 刚开始的时候帧率是60FPS,同一个场景运行一段时间以后是30FPS,如何优化,像这种符合很明显的对比场景,我们可以通过前后对比,来找出60FPS,30FPS,最大的变化。一般可以通过打开stats, 来观察前后主要的变化,main thread耗时,render thread耗时, 三角形面数,内存等信息,看看前后明显发生的变化。看到数据变化以后,再来思考整个过程中代码做了哪些事情,出现过哪些物体,最可能出的问题的地方,然后再证明, 只有证明了问题的存在,再着手优化。

(2)隔离法

这个是我经常用的一个方法, 就是隔离可疑区域和代码,然后比较,逐步排查,缩小问题范围。隔离法其实是非常好的方法,看上去很笨,很慢,但其实效率远比你想像的要好。比如,场景的物体过多,这个问题,那么我就可以采取隔离方法,先减少掉一倍,看效果。某个代码引发了帧率下降,可以逐步的注释掉代码,来观察结果,隔离的时候,可以采用二分查找,一半一半的排查。排查范围很快被缩小,问题也就精确的定位了。

(3)反经验法

上面介绍了常用的两种方法,定位问题,还有其他的一些方法,但我更想说的就是反经验法。你没看错,反经验,在性能优化的时候,不要过分相信经验,一步一步的逐步分析,有条不稳。不管什么问题,按部就班,不要根据经验,武断的下结论,要严格证明问题所在后再动手, 很多小伙伴遇到性能问题后,把问题简单的描述一下,去请教一个经验丰富的人,问他可能是哪方面的问题,根据他的猜测,你来优化。这种方式是很难做好你项目的性能优化的,项目和项目都不一样,连具体的问题都没有定位,你去请教经验丰富的老者,从老者的角度来说也无法帮到你。不要迷信经验,在动手前一定要定位好谁的问题,然后才能针对具体问题下对策。

优化架构, 标准规范化开发流程

好的框架设计,不仅让大家能很好的在一起工作,同时更方便我们快速的反应和定位问题。你的项目不好定位问题,那么一定是框架设计做的不好。所以开始做项目的时候,框架设计要花点时间,模块尽可能的独立,模块入口尽量清晰,整个框架设计能很好的隔离错误的蔓延。资源视图与逻辑代码分离,游戏数据与代码逻辑分离。这些都有助于快速的定位问题,比如我要验证是否物体过多,导致性能问题,只要在表格上配置一下,少放一些物体就可以验证,如果觉得是某个功能,导致消耗CPU,可以把物体的这个功能的组件关闭或不添加,比如怀疑怪物AI,可以注释掉添加怪物AI的组件,来证明。好的框架设计,在定位问题的时候,就变得非常简单。如果是ECS,定位会更加简单,内存看Entity与资源,算法性能看System与物体规模……

接下来要给大家介绍的是我认为最重要的经验,就是标准化,规范化项目开发进度和流程, 把性能问题一开始就放到日常项目开发中。我带项目的时候,每个礼拜至少做一次发布版本的测试,包含各个平台,不同的手机等。严格监测性能各项数据,哪个礼拜出现性能问题,马上可以回溯,复盘数据,着手摸清楚并解决,尽快修正。项目立项后,尽快的验证核心玩法极限时的性能开销与测试。不要等游戏项目做完了,才去验证,在设计初期验证完成后,针对一些性能问题组织技术公关,可能还要修改策划需求和玩法, 早期把性能问题尽快越早摸清楚,是确保整个项目成功上线的关键,不要等到上线了才到各平台做测试,那个时候功能多了,不知道有些问题是从什么时候开始就有的。标准的严谨的开发流程,伴随项目监控性能数据,尽快验证核心玩法,提前引入测试, 让我们整个项目开发做到有问题尽早发现,尽早纠正。

 

Unity 性能优化方法集锦

讲完指导思想,和开发流程这些宏观问题后, 我们再来讨论一些具体问题的常用的优化方法。

(1)包体体积优化:

声音文件优化

将wav,压缩成mp3或ogg, 最好是ogg,没有版权问题, 将多声道变成单声道。改变声音的采样率与码率,减少声音文件体积。

字体文件优化

尽量多使用系统字库,这样不用额外带字体文件。可以使用一些位图字库,来替代额外的字库。如果你的文本内容是固定的,可以对字库进行裁剪,把不用的字从字库里面删除掉,减少自带字库的体积。

贴图文件大小优化

将png转jpg, 并使用图片压缩软件,压缩贴图体积, 尽量减少图片数目,复用图片,尽量能使用颜色等代码的方式来代替贴图。

3D模型文件

根据需求适当降低模型面数, 去掉多余不用的数据, 可以通过法线贴图,高度贴图等将低模做出高模的效果, 合并贴图通道数据(PBR工作流中,将金属度,粗糙度,环境遮挡放一个纹理里面, 将数据合并到贴图不用的通道,比如Albedo贴图,Alpha通道不用,可以存放环境遮挡等,节约贴图数目)。

将资源ab包化

把所有的资源分成一个一个的ab包,ab包本身有压缩功能,这样整体的包体也会减小,如果可能,可以把ab包全部或部分放服务器,第一次运行游戏的时候再下载,比如《王者荣耀》,这样来节省包体体积。

(2): 骨骼动画优化:

3D游戏中骨骼动画也是非常消耗性能的地方,因为每帧,我们都要通过动画组件采样,采样后重新计算出来我们的顶点的位置,传给GPU的渲染管线来处理绘制, 我们可以将骨骼动画的每帧顶点的位置缓存到一个纹理贴图里面,用空间换时间的方式来节约动画组件的开销,并尝试合并Drawcall。

(3): LOD的优化:

对于大规模多角色的场景游戏,我们要开启LOD,让远处的物体用尽量少的面,近处的物体用更多的面, 来提升我们运行时候的性能。

(4): 使用3D模型细节增强,提升计算性能:

使用法线贴图,高度贴图等细节增强手段来降低模型的面数同时,能获得和高模同样的细节和更好的计算性能。

(5): 光照优化:

静态光照烘培+反射探头来做更好的场景效果,代替实时的光照计算,减少光源的数目。对于一些物体的发光特效,可以通过shader来实现,而不用加光源。定制Shader,可以将逐像素光照改为逐顶点光照,节约逐像素光照的计算开销。

6: SetPassCall与Drawcall优化

SetPassCall

SetPassCall通俗的讲就是更换重新装载在渲染管线里面的Shader代码和配置,就像换画笔一样的。SetPassCall开销非常的大,所以尽可能的要少用一些不同的Shader,在一个场景里面。尽可能的让同一个Shader 绘制最多的物体后再切换下一个Shader的物体。尽量避免绘制物体的时频繁交叉的来回切换Shader,节约SetPassCall的次数。

DrawCall

DrawCall 优化,其实很简单, 三种优化手段,静态合批,动态合批,GPU Instancing合批, 然后我们针对合批的条件去达成对应的条件就可以了,比如,我们做一个捕鱼达人3D游戏,我们有很多的鱼,可以把鱼的所有纹理贴图,放到一个大图里面,这样,这些鱼就是同样的Shader,同样的纹理贴图对象,就可以达到合批的条件而做到合批, 节约Drawcall。

(7): 物理引擎的优化:

能不用物理引擎的游戏,尽量不用物理引擎,能自己实现的尽量用代码自己实现,因为物理引擎的开销毕竟摆在那里了, 物理引擎使用很简单,但是性能开销也不可忽视。有一些不是真正的物理游戏,比如Moba类的游戏,防止物体穿透等,其实我们可以不用物理引擎,通过制作地图格子的方式,标记障碍物,自己控制的时候,如果进入障碍物的标记,就不让它更新位置即可,这些可以替换物理引擎获得很好的性能效果。常用的有菱形的地图格子与六边形的地图格子。

暂时不用的刚体,或者不在视线范围内的刚体可以根据游戏的需要,显示和隐藏,达到节约物理引擎计算的目的。修改物理引擎全局的迭代参数,获得实用性的同时又有更好的性能。了解物理碰撞器的性能开销,球体碰撞器最小,网格碰撞器最大,尽量使用开销小的碰撞器, 对于静态物体,能够合并物理碰撞器的尽量用一个物理碰撞器。

(8): 阴影的优化:

通过开关控制阴影,在低端机上关闭阴影获得更好的运行帧率,在高端机上开启阴影,获得更好的运行效果。通过伪阴影技术来做贴图,节约阴影计算的开销, 可以自己定制Shader来实现高性能的阴影效果。

(9): Shader优化:

减少Shader中的条件判断和展开循环,来获得更好的指令缓冲cache 命中率, 减少一些复杂的计算,可以采用一些空间换时间的方法来缓存计算结果。逐顶点计算来替代逐片元的计算,减少计算次数。可以把Shader 设置为常驻内存缓存,这样节约SetPassCall所带来的开销。

10: C#良好编码习惯与算法思想

Update里面尽量不要使用GetComponent, Find等,可以在初始化的时候先找出来,能放Update里, 尽量不放FixedUpdate, 这样低端机上能节约计算次数。全局设定,降低FixedUpdate每秒调用迭代的次数,节约FixedUpdate迭代时的计算时间。避免大量反复的new 对象。一些重复使用的对象,可以通过节点池等先反复使用,避免重复创建与释放。

可以用多线程来做一些计算,避免卡住main thread游戏线程导致帧率下降。不要在游戏主线程里面直接做同步的IO以免卡住游戏线程,导致帧率下降。

从开始写代码起,要把每行代码写好,长期的坚持积累,才能形成良好的代码习惯,写出高性能,高质量,高效率的代码,学好数据结构与算法,能很好的分析算法的时间复杂度,空间复杂度等。

经过上面的一些讨论,可能还会有很多优化技巧,欢迎大家留言讨论。同时我们有很多免费的Unity 性能优化的视频课程,供大家可以学习,成为优化优化的高手,

相关推荐

【实操篇】做爆款超休闲游戏的一些经验与教训!

表里有一个难度等级,我们指定一个难度等级的评判标准,比如,不用看广告过关的就是0星难度,看1次广告能过关的就是1星,最高我们是3星,然后内部我们把这些关卡体验进行难度评价。有了这些难度等级后,我们把表格数据,丢个AI,再给它设定一个难度曲线模型,比如螺旋上升曲线方程,这样,AI就可以给你生成一个关卡映射脚本,把映射好的,写回表格。经验4:当自己没有办法去买量验证的时候,应尽快的联系发行+合作,让他们先买起来,不要等时间,时间才是最宝贵的,有发行对接与搭配,能学习到外部的很多技巧。

voidinit的专栏 308

2026 AI大模型产业布局分析

一说到垂直领域的大模型,大家立刻会想到参数少,没有那么智能,但是能满足行业的需求的模型+机密的行业数据。目前AI主要是替代工具,并没有产生新的商业模式与生产力,除非免费使用AI的用户,能通过另外的商业模式变现回来,目前还没有看到。To B卖云服务给企业,相当于企业有一块"私有的机房+私有模型+私有数据",行业数据不会泄露的同时能获得专属大模型提供的服务,这里未来就是阿里云,腾讯云,百度云,华为云的阵地,他们获得各种推理大模型,然后部署,企业向他们购买服务,使用专属大模型的同时,构建自己的知识库等。

voidinit的专栏 322

【启发级】拆解与分类小游戏畅玩榜前100名的玩法模板,看下你手里有几个致富模板

今天(2026年5月8日)闲着无聊,我来把微信小游戏《畅玩榜》的所有游戏的玩法模板统计归纳一下,看看超休闲小游戏目前是哪些模板玩法在影响着我们的玩家。有两个或两个以上的同类游戏,我就把它称为"模板",只有一个游戏的类型,我称为"个例"。大家可以都玩一下,看看别人的创意与变种,看看这么多人做的题材为什么它火了,有哪些创新。羊了个羊+抓大鹅+救救我鸭+麻将消除模板。打螺丝 + 毛线 + 3D打螺丝毛线模板。拼图找茬+狙击找茬类游戏模板。躺平发育类塔防游戏模板。压力消除+三消类模板。消水果+物理阻挡模板。

voidinit的专栏 177

【收藏级】个人开发者如何使用AI解决美术问题实操经验分享(一)

我们与专业的美工,除了审美,美术设计以外,还缺的就是对各种基本美术工具的操作,比如ps等。让我们去学习PhotoShop的操作,显然也不现实,我的路径如下,把一些要切图的等一些美工的操作,都做成代码工具,用脚本来执行处理,代码工具的代码,用AI来完成。比如我专门有个文件夹是用Node.js来写的工具(建议大家用Node.js与Python,后期转MCP会更容易),这些工具完成特定的美术功能,比如,去掉周围多余的透明度,Gif转帧动画,图片缩放等,每个工具,我都做成了命令行,都能批量处理。

voidinit的专栏 432

【收藏级】小游戏如何安排工作计划能最快上线运营微信+抖音双平台

游戏名字一定不能有违规敏感字,避免做完软著后,微信通过了,抖音却过不了(在抖音里名字可能能创建小游戏后台,但未必审核通过,《废土摸金小队》在抖音创建小游戏的时候能通过,但是基础信息审核的时候无法通过,后来重新换名字做软著,浪费了时间还有两个品牌)。(6)微信的游戏名字创建的时候能过,表示就能通过,抖音的游戏名字要到基础信息审核通过后才能正式确定,所以会出现微信通过,抖音初步创建成功,可是当软著下来,到抖音提交基础信息审核时,抖音审核不过,所以游戏名字尽量不要有违规敏感字。

voidinit的专栏 458

AI实战:如何更好的使用AI开发游戏项目

这个过程AI就不是那么的擅长,所以需要你一步步的先搭建框架,再来指导AI主要的流程,分割出一个个的模块,一步步的把整个架子搭起来,最后再用AI将一个个功能区填充。比如你GameMgr里面有两种模式的玩法,AI分析出来以后,就会得到两种模式玩法的概念,这样你用这些"概念"去下提示词,就能更精准的操控AI,生成你要的代码。AI擅长开发工具脚本代码,有了AI,我们能出很多提升我们工作流效率的代码工具,以前为了节约工具开发时间的功能,而被迫手动处理的,现在都可以无限的交给AI写工具脚本来完成。

voidinit的专栏 569

个人开发者如何拉升产品运营数据

2: 皮肤,这个是最常用的通用手段,"奖励"是"每日登录"等模块的灵魂,玩家为什么会来挑战,因为有他想要的奖励,而奖励最常见的就是皮肤。拉升运营数据一般的指标有:人均用户时长,人均看广告的次数与看广告的动力,游戏的留存数据,社交裂变,产品矩阵。1:搭建产品矩阵,不再以单个的产品来看用户留存来看运营数据,而是通过多款产品来拉升用户的整体的运营数据。游戏上线后需要一波波的加一些内容上去,拉升爬坡产品数据,获得更好的运营结果,从而有机会获得更多的流量。这里列举的是通用的游戏模块,每个游戏都可以从,同时可重用。

voidinit的专栏 271

总结篇:新游戏如何调试买量模型与运营数据

一个个变量的调整,我们的调整顺序为:用户时长,用户次留,核心用户的时长,用户的pv,最后上“流氓广告”手段。例如游戏定位12~18岁的目标用户,就找对应的周边用户体验,拿反馈。加入,你一天买10W的量,可能5W是目标用户,5W为非目标用户,会导致整体的运营数据无法分析,波动很大。我们买到目标用户的判断为平均用户时长,所以我们只有在假定"产品匹配目标用户后用户平均时长>= 5+分钟"前提下去调整买量,当我们买回一批批量时,我们看用户平均时长是否达标,不达标继续调买量区间,价格,素材,广告计划,投放版位等。

voidinit的专栏 452

Unity转微信小游戏的版本迭代时的资源缓存过期的方案处理

老用户的"新代码+旧资源"加载的时候,会读取到旧资源的版本号,与服务器固定地址的最新版本号(干脆直接带到代码里的资源版本号,这样就不用部署服务器了)进行比对,如果不一样,就比较"最新的"与"老的"资源列表文件,删除掉md5不一致的资源文件,再进入游戏,这样老用户就能使用到 "新代码+新资源"。Unity+YooAssets关于新版本功能更新后,新用户使用的是"新代码+新资源",而老用户使用的却是"新代码+老资源",老用户使用的还是本地缓存的老资源,导致程序报错,无法正常启动。

voidinit的专栏 557

《废土摸金小队》2月8日~2月11日的运营总结与技巧分享

刚开始,我也是百思不得其解,我猜是买不到好的用户的量,然后打算错峰去买,同时我感觉系统会带你去那些没有人买的流量区去探索,所以我就排除掉一些不用的渠道,专注于朋友圈,视频号,小程序广告等,2月11日凌晨,我设置好日预算200,排除掉其它"垃圾渠道",把单价直接拉升到2块,高于大盘"射击类目"的平均值。我的操作手段有:提高出价,降低ROI,提高ROI,再次提高出价,限定年龄,排除49岁以上的,排除掉渠道"优量汇",换账号投放,使用AI智能投放等。到2月10日,我的问题仍然没有解决。其实目前的比例还挺好。

voidinit的专栏 728

Unity转3D微信小游戏从研发到上线发布踩坑记录与经验分享

对于H5来说,跑在微信上的小游戏没有这个问题,我们降帧到60FPS后,之前有问题的 1+ ace3也能流畅的运行,考虑到小游戏,而且小游戏的60FPS与120FPS没有差别,所以最后我们降帧到60FPS上线,手机apk的120FPS要比小游戏120FPS效果要强很多。裁剪的时候,一个个裁剪级别提升。某些情况下只能用同步加载的(比如UI界面的ICON,当你打开一个界面,要显示ICON,这就不适合异步加载,因为界面关闭后,还有icon没有加载完成,加载完成后会报错)我们被迫会要使用预加载+缓存Get的模式。

voidinit的专栏 781

Unity自动化美术资源校验工具(模型/材质规范检测)技术详解

csharp[CreateAssetMenu(fileName = "ValidationRule", menuName = "Tools/校验规则")]// 条件判断// 适用于的资源类型Model,Material,Texture,Animation,Prefab,AnyFileSize,Dimension,CountEqual,NotEqual,LessThan,Contains,EndsWith质量保障。

voidinit的专栏 1138

Unity基于GraphView的可视化关卡编辑器开发指南

csharp// 添加交互控制器// 缩放控制// 背景样式// 获取兼容的端口用于连接// 防止自连接// 防止同一节点连接// 输入只能连接输出// 类型必须匹配});// 创建房间节点// 创建敌人节点css/* 基础样式 */#关卡图 {/* 节点通用样式 */.node {/* 房间节点样式 *//* 敌人节点样式 */

voidinit的专栏 1282

分享一个好玩的:一次提示词让AI同时开发双引擎框架

既然是两个引擎的代码要同时生成,我就要把这两个引擎的框架代码做好规划,统一的放到一个文件夹下,让Cursor的工程关联到这个文件夹。在你的设计下,使用AI 写框架,具体代码不用自己写,能节约大家的时间,提升工作效率。对框架来说目录结构很重要,当用AI把大部分的框架的核心接口都生成出来后,我们进一步对目录结构做好规范,并同步设计思路给到AI,让它接下来的工作更"懂你",符合你的要求。AI 要用的好,需要人来给他指明一些方向,所以我们在使用AI写框架的时候,先给他指明一些基本的方向,目录结构就是很重要的一环。

voidinit的专栏 1188

试玩小游戏运营投放全流程详解

试玩基础库与小游戏基础库一样,API 会挂载在全局的 wx 对象上,但试玩里面能用的 wx 接口是不一样的,有些接口名虽然和小游戏的接口名一样,但定义上有细微差别,请仔细查看试玩的 API 文档。管理试玩内容在微信服务商平台完成,服务商管理员或服务商运营人员登录微信服务商平台后,点击【小游戏】->【试玩广告】->【去制作】即可进入试玩内容管理界面,管理该账号下的已有的试玩内容和创建新的试玩内容。当某个小游戏想要做试玩小游戏投放时,首先要开通小游戏的试玩能力,登录"MP后台",开通"试玩能力"。

voidinit的专栏 1388

AI游戏开发全自动编程课程体系(Cursor版,支持Unity/Cocos, Laya后续支持)

1: 基于AI工具+阅读《C#服务器+双客户端(Unity/Cocos)TurnKey》方案的架构与设计;基于《C#服务器+(Unity/Cocos)客户端Turnkey方案》全栈自动开发《好友对战五子棋》基于《C#服务器+(Unity/Cocos)客户端Turnkey方案》全栈自动开发《对战射击类游戏》基于《C#服务器+(Unity/Cocos)客户端Turnkey方案》全栈自动开发《捕鱼达人3D》基于《C#服务器+(Unity/Cocos)客户端Turnkey方案》全栈自动开发《割草类》

voidinit的专栏 1272

技术分享:游戏战场中如何处理角色死亡时各种姿势的“尸体“

Step2: 要模拟角色"死亡"后不同的骨骼摆放的位置,姿势各有不同,那么我们要给人形动画的每个关节带上一些物理刚体RigidBody+物理形状。(3)全部把"物理人形骨骼"开启以后,在脚下给"物理人形骨骼"一个"物理爆炸"的力。Step5: "物理爆炸"结束2秒后,再禁用"物理人形骨骼",这样角色就会躺在地面上,骨骼摆放为不同的姿势。运行的时候,正常情况下,"物理人形骨骼"都被禁用,不会对角色正常控制产生任何的影响。单独的针对"人形骨骼"的节点做一个独立的物理分组,不与其它的物理分组产生任何碰撞。

voidinit的专栏 831

搜打撤类技术分享:基于人形动画的上下半身分层状态控制

Move(下半身)+Idle(上半身)做为普通的Move状态,Move(下半身)+瞄准射击(上半身)做为带攻击的Move状态。支持Unity/Cocos双客户端,以“第三人称射击类”游戏为玩法主体,基于目前比较火的”搜“,”打“,”撤“的游戏结构,玩家通过战斗,收集装备,升级装备,获取宝物等可以战斗,可以撤退。ShootLayer: 播放角色的idle 或者 瞄准射击动画,把ShootLayer的人形动画,带一个动画Mask, 只作用上半身。(2):完整的第三人成射击类的”地图编辑器“的工具开发;

voidinit的专栏 638

给出一套方案:角色如何自由搭配枪械与武器

支持Unity/Cocos双客户端,以“第三人称射击类”游戏为玩法主体,基于目前比较火的”搜“,”打“,”撤“的游戏结构,玩家通过战斗,收集装备,升级装备,获取宝物等可以战斗,可以撤退。如果每种武器对于不同的模型,手臂的挂载点的位置不一样,我们可以在骨骼里面添加特殊的挂载点,来做到更好的匹配。分为"单手"模式与"双手模式",单手又分为"左手"与"右手",左手就绑定到左手的"锚点",右手就绑定到右手的"锚点"。step4: LateUpdate里面武器把自己的"锚点"与角色的"骨骼点"同步;

voidinit的专栏 748

关于“SUD全资收购Cocos“对开发者影响的一些看法

每次版本重大的升级,都会有很多的调侃,"这很Cocos",“这很王哲”。对于开发者而言,其实也没有必要过于的担心,如果下一阶段Cocos的引擎还可以满足企业的需求,那继续用就可以了,如果不能满足需求,换别的引擎即可,从一个引擎换到另外一个引擎,对于开发者的技术成本没有那么高,代码能力,设计思想,处理经验等,不会随着引擎的切换而改变。不同的工具,不同的生态,不同的做法,也会带来很多思路上的不同和思维上的碰撞,其实对开发者更多是好事。"变化"能给"一潭死水"的生活带来"意想不到"的变化。

voidinit的专栏 577

新课发布:《逃离鸭科夫》搜打撤类商业化方案

考虑射击游戏的题材,本游戏为3D游戏,不考虑2D模板。游戏的商业化渠道主要面向微信抖音小游戏,来做关卡和策划案,如果是手游或Steam,再做更复杂的场景+关卡。《肉鸽类》同一套数值,同时支持2D/3D类游戏,商业化方案已经完成,很多学员关心接下来是哪个方案。我们在找全免素材的过程中发现一套素材还不错,角色也是百搭,正好结合最近很火的《逃离鸭科夫》我们决定下一个课程方案为:第三人人称射击类游戏,核心玩法为鸭科夫的核心玩法”搜,打,撤“。(1):完整的第三人称射击类的"搜打撤"玩法的策划案,数值与成长体系;

voidinit的专栏 586

如何基于全免费素材,0美术成本开发游戏

最近我们肉鸽游戏原型方案开发完毕,接下来做商业化。遇到的第一个问题就是美术成本太贵。找了一些美术外包公司评估,报价都在15万以上。和之前的游戏美术成本评估有比较大的差距。IAA纯小游戏在没有验证的时候就投入"高成本"(相对于小游戏来说)无疑风险比较大。我们内部商议决定:"游戏商业化可以分为"数值商业化+美术精品化“。先快速试水与迭代,做好数值精品化。如果数据可以,再做美术精品化"。对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀观点1:免费素材3D比2D好,精品化2D比3D成本低

voidinit的专栏 1524

战斗系统核心设计:如何提供机制解决游戏项目中的成百上千的Buff

每一类Buff我们称为一个BuffModel, BuffModel实现了Buff的计算逻辑与策略,Buff框架根据BuffId的类型,找到匹配的BuffModel,再根据相关"属性"找到对应的处理函数,而BuffModel的编写留给具体的项目逻辑,我们只提供BuffModel的机制。比如复活以后,5秒的无敌状态,我们的实现逻辑为,计算伤害的时候,如果目标有"无敌Buff",那么我们就不计算伤害直接返回。-1,表示的是大类默认的,如果有特殊的小类,我们就可以注册这个属性的特殊的小类。有限状态机,行为决策树?

voidinit的专栏 1378

战斗系统架构:为什么游戏战斗适合ECS架构?

以此来代替传统复杂的继承体系。2: 游戏世界中的角色:玩家(主角,其它玩家角色,小兵队友等),敌人(近战小怪,远战小怪,精英怪,Boss怪等),道具(戒子,宝石,加速鞋等), 传送门,NPC(任务NPC, 商城兑换NPC等),游戏子弹等。8: 面对5种英雄,8种军团兵种,25种敌人怪物,37种道具,49种技能,32种局内升级,15级的局外天赋升级,我们是如何做好技能与Buff的架构?优势4: 组织结构更加的清晰规范,基于不同的迭代,分开代码文件,避免一个代码文件中,N个不相关的代码逻辑,也方便重构与替换。

voidinit的专栏 953

《商业化陪跑肉鸽项目》正式结束!

2: 本教程的详细目录如下:(注:框架使用我们商用框架,课程没有包含在内)(8): 战斗逻辑采用ECS架构,扁平独立的逻辑处理,替代继承体系;(5)适合微小,抖小的创业者,快速基于我们的工具构建自己的产品项目;(2): 8种暗影军团角色,包含远战与近战,局外天赋与局内升级;(1)熟练掌握商业化项目的框架设计,策划案,项目开发;第048节战斗范围的调试区域绘制与被攻击时的决策规则。第080节局外战斗Buff与局内升级Buff的初始化。(4): 16种技能,17种道具,59种Buff;

voidinit的专栏 501

游戏开发中的暂停的设计

如此一来,当游戏战斗世界要暂停的时候,只要针对"游戏管理"来暂停不迭代,从而导致游戏管理的update不再迭代其它的战斗单元的"Logic Update",这样导致整个的游戏世界+游戏战斗单元全部暂停。思考2: 游戏暂停,我们是针对战斗逻辑暂停,其它的部分可以不用暂停,这样开宝箱等动画需求时,都不会受到影响,我们只是暂停游戏的逻辑迭代+游戏角色的动画暂停,游戏世界中的粒子暂停。(一)针对游戏战斗世界暂停,游戏逻辑管理负责做好游戏战斗单元的暂停与恢复即可:暂停战斗单元迭代,暂停战斗单元动画,特效。

voidinit的专栏 933

团体战斗核心技术:如何防止团体进攻中角色堆叠在一起

比如A, B两个角色同向向右移动,当A,B发现彼此"堆叠"后,A迭代完移动,然后堆叠处理模块再把A往回迭代,这样A就不动,B正常移动,这样多次处理后,A与B保持安全距离了,则A继续移动。如:角色与怪物走进了自己的攻击区域,则发起攻击,不会继续前进,自然就通过攻击来将"异类"的堆叠避免,如果有必要,也可以把同类堆叠处理改成全类防堆叠处理。"堆叠模块"在每次迭代的最后的逻辑处理。如下图的代码接口,战斗迭代的时候,堆叠发生在寻路导航,AI处理,技能释放等迭代的最后,最后再调用堆叠模块"来"修正堆叠"现象。

voidinit的专栏 721

经典面试题:“你们的项目中是如何做红点系统的“?

面试官你好,红点是复杂游戏必备的提醒玩家与推进玩家游戏进程的工具与手段,在项目中非常常用。每个公司的项目的需求不同,设计的方式和结构可能不一样,我们公司之前的某个项目是这样做的。

voidinit的专栏 607

面试经典问题:如何设计红点系统?

游戏开发中,随着功能越来越复杂,我们会有一些重点的提示,需要让玩家每天都了解与清楚,比如新触发的任务,未领取的奖励,商城中的特惠活动,有未读的系统消息,有新的装备可以穿戴上,达成可以升级条件,升级相关的角色与装备等需求。而二级界面下面可能又有不同,比如任务,二级分类为"系统任务",“好友任务”,下面就有新的任务需要显示红点,一级分类"任务"有红点,同时二级分类"系统任务",“好友任务”也要有红点提示。红点数据,不同的界面层级,有不同的红点数据,比如,一级界面的红点可能显示的是,任务,邮件,商城,奖励等。

voidinit的专栏 1061

Unity面试技巧每日分享

某个类型的某个新上架的商品。1: 方便有红点需求的地方,调用一个接口就可以把红点展示出来,所以我们会提供一个显示红点的接口,只要调用,就能在特定的位置显示红点;而二级界面下面可能又有不同,比如奖励,下面就有未领取的奖励需要显示红点,而正式因为有未领取的奖励,所以一级界面"奖励"那里才有红点。3: 红点的显示有对应的层级,我们会把红点单独的放一个层级,这样避免红点来打乱界面的合批,同时能让红点在一起渲染。红点数据,不同的界面层级,有不同的红点数据,比如,一级界面的红点可能显示的是,任务,邮件,商城,奖励等。

voidinit的专栏 293
上一篇: 干货分享: Unity 3D模型如何导给Cocos Creator使用
下一篇: 游戏服务器需要学习哪些知识(C/C++)
Clank的游戏栈
Clank的游戏栈 企业官方账号 企业官方账号
博客等级 码龄21年 2889粉丝 561原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值