Unity游戏开发经验点滴_unity游戏开发心得体会-程序员宅基地

技术标签: 算法与游戏  经验分享  Unity3D优化技巧  游戏开发  移动平台  

游戏开发中会遇到各种各样的问题,只有经历过了才会深刻,这里就游戏开发的经验点滴给读者分享一下,下面先从代码说起。
从事IT行业这么多年了,写过或者看过很多代码,有的项目代码写的不错的,大家经过多年的努力都会从初级程序员到主程的发展,作为主程除了做架构设计,带团队外,就是审核代码,现在程序员写的代码,大部分都是只根据需求而写,游戏开发与其他开发最大的不同是需求经常变化,朝令夕改用于游戏策划一点都不为过。这就要求程序员再根据需求写逻辑时,多跟策划沟通,把一些可能发生的事情都考虑完整再动手写代码,即使这么做了,后期还会修改。所以作为逻辑程序员很难的。程序员能做的事情尽量减少自己的工作量,把代码设计的灵活一些,最好的方式就是采用数据驱动。

数据驱动

我在做端游的时候,项目经理说的最多的就是数据驱动,我们的逻辑是通过配置数据让其运行的,表的设计,这些就需要程序员跟策划协商沟通,每个表都有自己的唯一ID项,通过ID去查询数据,程序要做到,逻辑的增加只局限于几个文件,不要牵扯太多。切记在代码里面不能出现具体的ID号,这样一旦策划修改表项,你的逻辑就需要修改,看过一些代码把具体的ID号都写到程序里面了,这么做是非常不好滴,让人感觉不专业,非常业余,还有代码不加注释也是不能容忍的,这个是为了更好的传承,我们说一个公司的技术积累,这个积累也包括代码注释。
在程序启动时,关于数据表的加载问题,很多程序员的一些做法是:在程序启动时,把数据表一次性加载到内存,然后用到数据时再去一条一条查找。这么做可以不?答案是可以的,但不是最优方案,因为首先把所有的数据表一次性加载到内存中,会占用大量的内存,很多人见过的表可能不是很多,但是一旦表格数量很多,表格数据达到万行以上就是一个灾难啊,为了防止灾难发生,加载时就要有选择的去加载,当前场景用到的数据表加载进来,分步骤进行。再有一个问题是遍历数据,服务器大家如果了解过应该知道,它可以离线加载数据,而且可以一次性加载,查找数据不需要去每条遍历,这样提高了运行效率,这种方式客户端也可以使用的,优化要从一点一滴做起。

代码拆分

再说代码的编写,看过游戏开发的代码,动辄几万行,至少几千行。让新人阅读起来非常费劲,再加上没啥注释,看代码简直就是灾难。这种代码就需要重构了,怎么重构?很简单的,首先根据功能进行划分,类有一个修饰词partial,它可以将一个类拆分成多个类,类的名字可以根据功能进行命名,这样一旦扩充起来可以使用多个类文件表示,不用在一个类里面一直写,这样会导致代码非常庞大,函数的定义可以根据类的功能名字去划分。比如下图所示的:
在这里插入图片描述

资源打包

unity官方提供了一个打包工具,Assetbundle,我们可以将美术资源,音效,文本文件都可以打成Assetbundle,关于资源打包,我们还需要考虑依赖打包,因为很多模型都会彼此依赖,这个关乎内存的加载和释放。很多人打包并没有使用依赖打包,导致资源重复的加入到内存中,依赖打包还需要注意释放的先后顺序,这个可以通过引用计数的方式进行,另外,这个工具我们可以在此基础上进行扩充,比如加入版本更新的处理等等,效果如下图所示:
在这里插入图片描述

角色动作处理

随着Unity版本更新,大部分公司使用的都是Animator,采用AnimatorController控制器的新动画状态机去处理Unity的动作切换,使用这个的好处是,该动画状态机使用了FSM的封装处理,加入了动作的融合,另外,提供了Humandoid模式,不同的角色可以采用同一套骨架的处理等等,Animator作为Animation的替代品,Unity官方一直维护着,细节的东西,Unity引擎都为我们处理过了,我们只需要使用诸如SetTrigger,SetInteger这些函数接口调用就可以,另外还需要动作的帧回调函数,可以采用配置表的方式进行,不需要每次都是在动作上自己填写,一旦动作更换非常麻烦,因为Animator它会牵涉到一些矩阵变换,所以,在不需要的物体上切记不要挂Animator这个组件。因为Max导出模型直接放到Unity引擎时,会自动挂上,导致程序运行时帧率降低,所以可以写个工具检测一下,不需要的可以直接删掉。

Shader优化

Unity官方提供了一些Shader,这些都是最基本的,在开发高品质产品时基本用不上,在我看来,它只适合于学习,不适合做产品开发。Shader的编写其实我们不需要一行一行的代码敲,有几个插件可以使用比如:Shader Forge和Unity自身的Shader Graph。Shader Forge,它为了适配不同的硬件会使用D3D,OpeGL,Metal等等图形库,它做的是非常全面了,但是在Android比较挑剔的情况下,我们是不需要的,可以把对应的#pragram 注释掉,这个也是一种优化方式,还有看一下Setpass call的数量,它也是Shader优化的一种方式,当然数据变量的精度也是需要考虑的,另外Shader中尽量避免判断条件语句和循环语句的出现,以及复杂函数的计算等等。
现在游戏品质要求越来越高,角色Shader的渲染,为了提升渲染效果,美术需要制作多张图片,普通的制作方式已经不能满足需求了,也就是通用的法线,高光,反射这些已经无法满足需求了,这就带来一个问题,当程序加载角色资源时,会涉及到大量的图片加载,这样的后果会导致实例化一个角色时间比较长,当然加载时间长也会有其他因素,比如一些废弃的面和动作没有删除掉,但是我们能够控制的是可以将多张图片进行优化,比如颜色有RGBA,我们也可以将贴图按照RGBA通道进行合并,这种方式比较流行。
后处理渲染效果,Unity提供的Post Processing Stack由于效率问题,我们一般会做一些优化操作,这个可以参考UE4的处理方式,可以将一些传统的算法优化,可以将UE4的移植到Unity里面。
贴图的优化可以使用国外提供的压缩方案:www.tinypng.com

特效制作流程

美术制作特效流程,很多特效人员对其执行的并不是特别好,其实非常简单,主要分以下几步:
第一步:一般的特效需要特效人员把特效制作好,按照原点的方式制作,不要产生位移;
第二步:特效名字是根据使用者命名的,命名规范要做好。
第三步:特效的挂节点通过配置表进行配置,然后程序动态的生成虚拟挂节点,这个事情可以由策划提供。
第四步:关于一些特效大招,比如有镜头的控制,一般是由特效人员去制作完成,当然动作这块可以进行配 合,也可以在MAX工具里制作镜头移动然后交付给特效人员使用。
第五步:特效制作完成后,需要策划跟动作一起验收,看是否满足需求,提出修改意见。
第六步:将角色和特效放到游戏实际场景中去看效果,这个需要程序配合,提出修改意见。

总结

游戏开发会涉及到方方面面,这里只是把项目中暴露的一些问题做了总结,以备查阅使用。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jxw167/article/details/102318967

智能推荐

海康威视网络摄像头开发流程(五)------- 直播页面测试_ezuikit 测试的url-程序员宅基地

文章浏览阅读3.8k次。1、将下载好的萤石js插件,添加到SoringBoot项目中。位置可参考下图所示。(容易出错的地方,在将js插件在html页面引入时,发生路径错误的问题)所以如果对页面中引入js的路径不清楚,可参考下图所示存放路径。2、将ezuikit.js引入到demo-live.html中。(可直接将如下代码复制到你创建的html页面中)<!DOCTYPE html><html lan..._ezuikit 测试的url

如何确定组态王与多动能RTU的通信方式_组态王ua-程序员宅基地

文章浏览阅读322次。第二步,在弹出的对话框选择,设备驱动—>PLC—>莫迪康—>ModbusRTU—>COM,根据配置软件选择的协议选期期,这里以此为例,然后点击“下一步”。第四步,把使用虚拟串口打勾(GPRS设备),根据需要选择要生成虚拟口,这里以选择KVCOM1为例,然后点击“下一步”设备ID即Modbus地址(1-255) 使用DTU时,为下485接口上的设备地址。第六步,Modbus的从机地址,与配置软件相同,这里以1为例,点击“下一步“第五步,Modbus的从机地址,与配置软件相同,这里以1为例,点击“下一步“_组态王ua

npm超详细安装(包括配置环境变量)!!!npm安装教程(node.js安装教程)_npm安装配置-程序员宅基地

文章浏览阅读9.4k次,点赞22次,收藏19次。安装npm相当于安装node.js,Node.js已自带npm,安装Node.js时会一起安装,npm的作用就是对Node.js依赖的包进行管理,也可以理解为用来安装/卸载Node.js需要装的东西_npm安装配置

火车头采集器AI伪原创【php源码】-程序员宅基地

文章浏览阅读748次,点赞21次,收藏26次。大家好,小编来为大家解答以下问题,python基础训练100题,python入门100例题,现在让我们一起来看看吧!宝子们还在新手村练级的时候,不单要吸入基础知识,夯实自己的理论基础,还要去实际操作练练手啊!由于文章篇幅限制,不可能将100道题全部呈现在此除了这些,下面还有我整理好的基础入门学习资料,视频和讲解文案都很齐全,用来入门绝对靠谱,需要的自提。保证100%免费这不,贴心的我爆肝给大家整理了这份今天给大家分享100道Python练习题。大家一定要给我三连啊~

Linux Ubuntu 安装 Sublime Text (无法使用 wget 命令,使用安装包下载)_ubuntu 安装sumlime text打不开-程序员宅基地

文章浏览阅读1k次。 为了在 Linux ( Ubuntu) 上安装sublime,一般大家都会选择常见的教程或是 sublime 官网教程,然而在国内这种方法可能失效。为此,需要用安装包安装。以下就是使用官网安装包安装的教程。打开 sublime 官网后,点击右上角 download, 或是直接访问点击打开链接,即可看到各个平台上的安装包。选择 Linux 64 位版并下载。下载后,打开终端,进入安装..._ubuntu 安装sumlime text打不开

CrossOver for Mac 2024无需安装 Windows 即可以在 Mac 上运行游戏 Mac运行exe程序和游戏 CrossOver虚拟机 crossover运行免安装游戏包-程序员宅基地

文章浏览阅读563次,点赞13次,收藏6次。CrossOver24是一款类虚拟机软件,专为macOS和Linux用户设计。它的核心技术是Wine,这是一种在Linux和macOS等非Windows操作系统上运行Windows应用程序的开源软件。通过CrossOver24,用户可以在不购买Windows授权或使用传统虚拟机的情况下,直接在Mac或Linux系统上运行Windows软件和游戏。该软件还提供了丰富的功能,如自动配置、无缝集成和实时传输等,以实现高效的跨平台操作体验。

随便推点

一个用聊天的方式让ChatGPT写的线程安全的环形List_为什么gpt一写list就卡-程序员宅基地

文章浏览阅读1.7k次。一个用聊天的方式让ChatGPT帮我写的线程安全的环形List_为什么gpt一写list就卡

Tomcat自带的设置编码Filter-程序员宅基地

文章浏览阅读336次。我们在前面的文章里曾写过Web应用中乱码产生的原因和处理方式,旧文回顾:深度揭秘乱码问题背后的原因及解决方式其中我们提到可以通过Filter的方式来设置请求和响应的encoding,来解..._filterconfig selectencoding

javascript中encodeURI和decodeURI方法使用介绍_js encodeur decodeurl-程序员宅基地

文章浏览阅读651次。转自:http://www.jb51.net/article/36480.htmencodeURI和decodeURI是成对来使用的,因为浏览器的地址栏有中文字符的话,可以会出现不可预期的错误,所以可以encodeURI把非英文字符转化为英文编码,decodeURI可以用来把字符还原回来_js encodeur decodeurl

Android开发——打包apk遇到The destination folder does not exist or is not writeable-程序员宅基地

文章浏览阅读1.9w次,点赞6次,收藏3次。前言在日常的Android开发当中,我们肯定要打包apk。但是今天我打包的时候遇到一个很奇怪的问题Android The destination folder does not exist or is not writeable,大意是目标文件夹不存在或不可写。出现问题的原因以及解决办法上面有说报错的中文大意是:目标文件夹不存在或不可写。其实问题就在我们的打包界面当中图中标红的Desti..._the destination folder does not exist or is not writeable

Eclipse配置高大上环境-程序员宅基地

文章浏览阅读94次。一、配置代码编辑区的样式 <1>打开Eclipse,Help —> Install NewSoftware,界面如下: <2>点击add...,按下图所示操作: name:随意填写,Location:http://eclipse-color-th..._ecplise高大上设置

Linux安装MySQL-5.6.24-1.linux_glibc2.5.x86_64.rpm-bundle.tar_linux mysql 安装 mysql-5.6.24-1.linux_glibc2.5.x86_6-程序员宅基地

文章浏览阅读2.8k次。一,下载mysql:http://dev.mysql.com/downloads/mysql/; 打开页面之后,在Select Platform:下选择linux Generic,如果没有出现Linux的选项,请换一个浏览器试试。我用的谷歌版本不可以,换一个别的浏览器就行了,如果还是不行,需要换一个翻墙的浏览器。 二,下载完后解压缩并放到安装文件夹下: 1、MySQL-client-5.6.2_linux mysql 安装 mysql-5.6.24-1.linux_glibc2.5.x86_64.rpm-bundle