c语言开发unity,[Unity3D]U3D开发项目总结

从2月份到现在第一个U3D项目也基本收工,虽然项目结局不是太好,但总算也是成功卖掉并上线,总结将近10个月的时间大家从端游转到手游或从COCOS2转到U3D的整个开发过程。

1.资源

无疑这是整个项目我觉得做的最差的地方,也是前期最为忽略的地方,犹豫U3D组件式架构的原因和本身资源打包加载的一个限制,导致后期项目资源异步加载以及动态更新很难实现。

起初犹豫是项目玩法参考《印第安大冒险》,在导出它的包查看了它的结构以及部分实现的代码后,发现基本也未作任何资源管理,资源基本上一个关卡一个场景的方式组织,所以也就按他的方式,只是简单的按场景、特效、UI等进行了简单的划分。

但是随着关卡的复杂性的增加,游戏复杂性的增加,问题也随之而来。

项目问题以及方案:

(1) 场景加载慢,无法异步加载

因为没用AB管理资源,所以很难实现异步加载,但是场景已经完成到了某种程度,也很难重新设计资源加载方式,所以临时找了另一种方案。、

a.先将原始资源移动到Resources目录先,这样的原因是为了在加载场景是预加载纹理、模型等资源,随之而来的问题便是Resources下的目录中不能保留不需要的资源,否则会一起导入安装包,导致安装包庞大,最后写了一个编辑器扩展脚本在打包时候清理掉所有游戏未引用的资源。方法是找到所有场景以及与之的依赖资源并记录,找到所有资源在一处记录的资源,剩余资源统一删除。

b.扩展一个编辑器脚本生成当前场景所有依赖资源列表,生成预加载文件,在加载文件时读取并通过Resource.Load加载并保存,切换时候在释放。为了实现模拟异步加载的效果,加载时在一个新的协程中加载,加载两个返回一帧。

(2) 运行时怪物创建卡顿

同样这个也是由于这个原因造成的,解决方案相对取巧,由于怪物是有触发器创建,所有在加载场景时候会预先创建所有怪物并隐藏,知道触发后在显示出来。

(3) 特效、技能等预制资源卡顿

同样这个也是由于这个原因造成的,解决方案,这个比较传统,增加了一个预制缓存池,创建场景时候会对指定配置的特效做缓存,创建时候从缓存中取出,用完还回去就可以了。

(4) 资源更新

这个暂时只能妥协,只做了配置文件的更新

理想解决方案:

(a) 以Prefab为基本打包力度,为特效、UI节点、角色等等保存为Prefab。

(b) 将所有代码、Shader、等等公用基础资源打包到Common.ab。

(c) Push:Common.ab的基础上打包UI/Audio/Effect/Actor...等分支下的Common_*.ab。

(d) Push:Common_*.ab的基础上打包UI/Audio/Effect/Actor...下的预制到 *.ab。

(e) 加载加载Common.ab,在加载分支支援时候先加载相应的Common_*.ab后在加载特定的ab。

(f) 加载可以采用异步加载形式,场景创建时候可以先创建空节点,等异步加载完成后在创建并挂接到该节点上。

(g) 关于Level,打包时候打包基本场景以及关照贴图,加载后在动态加载响应节点数据并挂接上去

2.特效

首先这边的特效基本是有端游转过来的,而前期对特效没有做一些规范性的限制,导致一些特效复杂度相当高,以及里面包含大量Animator(这个损耗相当大)。

其次特效未作统一的管理,而仅仅是简单的做成一个Prefab。造成后期特效不是太好优化。

理想解决方案:

(a) 提供一个特效编辑器,组织特效,发布的时候检查并提示出一些必要的警告方便特效人员修改,同时未特效预制加入自动管理脚本。

(b) 或采用一些比较好的插件 FX Maker 等。

3.场景

场景最大的问题同样是没有好的规范,导致前期场景模型用了大量的多维材质,比如一个石头可能有 表面/中部/底部/边缘 等四个材质等等。

理想解决方案:

(a) 尽量只使用一中材质,当然有些工具比如Mesh Banker 可以拿来优化。

(b) 地表装饰无尽量将贴图合并到一张Atlas公用,减少批次,比较特殊的情况比如 Repeat Mode的贴图可不处理。

(c) Static Batch 虽然能够做一定的优化,但是会大大的增加Level暂用的硬盘空间,所以可以根据实际场景视角等来确定是否开启以便减少生成包的大小。

4.动作

操控相对简单,虽然Animator很强大,单可控性却不是很高,所以选择使用Animation,通过Layer进行状态融合处理。AddMixTransform 可以进行上下半身或者特殊部分动作混合。

附带:关于Animator性能,场景中Animator过多会造成CPU消耗过高,而Aniamtion有可见在更新的状态选项可以进行控制,Animator却不行,因为是统一管理,所以需要注意。

5.NGUI

NGUI确实很强大,有自己的批渲染,这类也不需要多说,其中有两个可以分享的地方

(a) 特效与NGUI层级,实际上NGUI/Panel/DrawCall会有一个RenderQuene,为了层级正确我们应带改变特效material.renderququne = DrawCall.RenderQuene + 1,这样特效就可以在正确的面板上显示与遮挡。

(b) DrawCall优化,可以利用 Panel:ShowDrawCall工具手动调整Panel中空间的order来减少DrawCall。

6.代码加密

代码加密相对麻烦,因为其实整个过程中也通过ISpy查看过不少游戏的代码,基本很少做加密的,少量做了混淆。

理想解决方案:

(a) GitHub 上下载 Unity 官方 Mono库

(b) 找到 image.c : mono_image_open_from_data_with_name 函数:

增加代码:(简单的混淆DLL)

if  (NULL != strstr(name, "Assembly-CSharp.dll"))

{

for (; i < data_len;)

{

data[i] = ~data[i];

i += k;

k += 1;

}

}

后编译生成 libmono.dll/so 到相应平台

(c)将Assembly-CSharp.dll反向混淆

7. 纹理压缩

用disunity导出U3D打包后的资源法线android下纹理实际上是经历过一次转换的:

带Alpha通道贴图-> TGA 未压缩格式 / 除非设置 通常都带Mipmap

不带Alpha通道贴图-> KTX (ETC1 android) 不带Mipmap

显然为了减少纹理对GPU芯片带宽的浪费以及对内存的浪费android下应当使用ETC1,而且ETC压缩失真不算严重,验证可接受。

那么对于带Alpha通道的贴图应该如何处理?解决方案1.提取Alpha为单独的Alpha通道贴图 2.提取Alpha为灰度图在保存为ETC1(默认会转换)。

这样有效提高程序性能同时也相应的会减少压缩后包的大小。因为TAG不然缩与ETC压缩后在ZIP压缩还是有一定的空间大小差距。

8.其他一些特效

shadow_gun 中有很多不错的 shader 可以用用 比如EnvCube可以支持带lingthingmap的Cube反射材质,做冰柱等效果非常好。

water 等可以简单的用一张nosiy贴图加Cube反射模拟,效果也可以接受。

unity / image effect/ MothionBlur 可以做Boss死亡特效 配合 Time.timeScale K帧。

等等 暂时只回想起这么多,希望对大家有帮助,有问题可以探讨。

今天项目组换老大了,希望换人后上线能顺利,毕竟也花费了不少精力,周五也得离开了,想想也挺伤感的,游戏行业真不好混。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566582.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux dd 进度条,Progress 进度条 – DDProgressHUD

DDProgressHUDProgress 进度条&#xff0c;UIActivityIndicatorView 小菊花&#xff0c;弹窗&#xff0c;状态显示&#xff0c;高度自定义DDProgressHUD的介绍提供了四种类型的展示&#xff1a;显示无限旋转的加载图(比如小菊花&#xff0c;可以自定义)&#xff0c;显示文字信息…

android notification自动消失,Notification点击事件和点击消失

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。https://blog.csdn.net/u012691505/article/details/53004930用到Notification遇到一些问题记录一下1.Notification的点击事件(点击弹出对话框)网上有很多做法&#xff0c;我的做法是&#xff1a;(1)…

Android动态图标包制作教程,安卓手机ico图标制作美化图文教程

如何让手机更加与众不同?今天我们就来学习如何利用出色的ico图标制作软件——Axialis IconWorkshop制作出美化手机屏幕的个性图标!如今&#xff0c;每个人都有属于自己的手机&#xff0c;每天使用手机聊QQ、刷微博、玩游戏&#xff0c;可以说手机已经是很多人生活中不可缺少的…

android progressbar 水平动画,Android ProgressBar 自定义样式(三),动画模式

果&#xff1a;和之前的一样&#xff0c;在布局文件中&#xff1a;android:id"id/progressBar3"android:layout_width"wrap_content"android:layout_height"wrap_content"android:indeterminate"false"android:indeterminateDrawable&…

android工程师绩效,Deloitteandroid开发工程师工资待遇怎么样 - 德勤华永会计师事务所(特殊普通合伙) - 职友集...

职责描述&#xff1a;• Ability to design holistic and data-driven financial risk management solutions that strengthen client’s financial risk management capabilities, while enhancing shareholder value• Ability to build an in-depth knowledge of the client…

android gridview行分割线,Android使用GridView实现表格分割线效果

使用gridview实现表格分割线效果&#xff0c;网格布局表格布局也是可以实现的。效果如下&#xff1a;1.主函数代码&#xff1a;package com.example.qd.douyinwu;import android.app.activity;import android.content.context;import android.os.bundle;import android.support…

android代码打开数据库,android – 如何正确关闭并重新打开Room数据库

您好我有2个应用程序依赖于制作和恢复应用程序数据库的备份,只需将数据库文件复制到SD卡中,然后很难确定如何在关闭它之后重新打开Room Database单例以创建数据库’副本.构建数据库&#xff1a;Database(version 15, exportSchema true, entities [list of entities])abstra…

android 按钮控制线程,关于手机安卓-线程测试

如题&#xff0c;我测试时&#xff0c;只执行了一次&#xff0c;第二次卡住时间到后&#xff0c;没有调用超时判断&#xff0c;特请教一下&#xff0c;代码如下&#xff1a;/**********线程控制*******Dim 检测线程Thread.SetShareVar "是否卡主", false检测线程 Th…

android hook 实例,代码实例分析android中inline hook

以下内容通过1、实现目标注入程序&#xff0c;2、实现主程序&#xff0c;3、实现注入函数&#xff0c;4、thumb指令集实现等4个方面详细分析了android中inline hook的用法&#xff0c;以下是全部内容&#xff1a;最近终于沉下心来对着书把hook跟注入方面的代码敲了一遍&#xf…

dax 筛选 包含某个字_筛选状态(ALL与REMOVEFILTERS)

这一章比较绕&#xff0c;但是帮助我们理清切片器的筛选状态以及主要函数对于公式筛选上下文的改变。1.切片器的筛选状态切片器的全选与全不选的状态的区别&#xff0c;我们可以看下图&#xff1a;全不选全选多个点击筛选逐个点击至全部结论初始状态&#xff0c;没有选择任何元…

android数据共享 设计,水文数据共享平台移动端的设计与实现

摘要&#xff1a;水文观测数据是进行流域水文科学及相关科学研究的基础.2010年国家自然科学基金委员会启动重大研究计划"黑河流域生态—水文过程集成研究",提出流域数据工作是"黑河计划"的重要组成部分.本文以黑河流域为研究背景,通过对黑河流域已有各种观…

山东鲁能轨道智能巡检机器人_温湿度传感器在轨道巡检机器人中的应用

▲地下综合管廊智慧管廊建设&#xff0c;是智慧城市在地下的一个缩影&#xff0c;有助于缓解“大城市病”&#xff0c;实现精细化和动态管理。与此同时&#xff0c;各种传感器技术也将被运用到地下综合管廊运维的每一环&#xff0c;这其中&#xff0c;地下管廊巡检机器人便是其…

android显示网络图片控件,Android控件之ImageView(二)

前言在上一篇文章中&#xff0c;我们讲解了如何加载本地图片&#xff0c;那么在实际项目中 ImageView 大多数使用场景是加载网络图片&#xff0c;网络图片其实就是存储在服务器上的文件&#xff0c;我们需要从服务器获取到文件的二进制输入流 Inpustream &#xff0c;然后将其转…

坯子库曲面推拉教程_一招曲面流动,搞定99%异形建模

曲面流动可以建什么模型&#xff1f;这样的▼这样的▼还有这样的▼那究竟如何使用曲面流动呢?本文告诉你!曲面流动是什么&#xff1f;曲面流动功能相当于Rhino(犀牛)中的“沿曲面流动”命令&#xff0c;可以使来源几何体群组或组件&#xff0c;根据基准平面为参照&#xff0c;…

android o 结构光流程,惊艳亮相!一分钟看懂OPPO Find X 3D结构光技术是什么鬼,太牛了...

法国时间6月19日&#xff0c;OPPO在巴黎卢浮宫正式举办未来旗舰Find X发布会。此次亮相的Find X新机&#xff0c;既有充满艺术感的3D玻璃机身设计&#xff0c;又有3D结构光、曲面全景屏、双轨潜望结构等多项黑科技。众多黑科技中&#xff0c;以3D结构光O-face最受数目。据悉&am…

jframe运行和预览大小不一样_同一款车型,为什么配的轮胎大小还会不一样?【内含福利】...

小编又来给大家送福利啦~阅读完文章之后 戳文章底部阅读原文 岁末巨献 国货好胎&#xff01;免费体验价值1999元国产轮胎&#xff01;相信有不少朋友&#xff0c;买车的时候一定会有类似的经历。选车、试驾的时候&#xff0c;看到试驾车配置相当漂亮&#xff0c;尤其搭配的轮圈…

关于鸿蒙系统传统文化的作文,关于生活中的传统文化作文(精选10篇)

关于生活中的传统文化作文(精选10篇)在学习、工作或生活中&#xff0c;大家都接触过作文吧&#xff0c;作文可分为小学作文、中学作文、大学作文(论文)。一篇什么样的作文才能称之为优秀作文呢&#xff1f;以下是小编帮大家整理的生活中的传统文化作文(精选10篇)&#xff0c;仅…

java设计按月每天签到_活动攻略|新同学新签到,欢乐福利全都要!

12月03日【每日一题答案】— 枫叶书签答对问题即有机会获得金币、道具、积分&#xff0c;还有宠物好奇星噢~12月来了&#xff0c;和12月一起来的是我们的新同学——花轮&#xff01;谁不喜欢浪漫体贴的小少爷呢&#xff01;喵星星感觉自己爱消除【最受欢迎男性角色】的地位正岌…

android已停止三星,急,android离线打包程序三星下总报 程序 已停止

解开锁屏后&#xff0c;就看到 图片所示的 程序 已停止的提示框&#xff0c;logcat显示如下11-27 15:33:33.725: I/AndroidRuntime(24861): VM exiting with result code 10, cleanup skipped.11-27 15:33:48.895: D/AndroidRuntime(25816): Shutting down VM11-27 15:33:48.89…

bs cs架构区别_软件架构设计分层模型和构图思考

今天谈下架构设计中的分层思维和分层模型以及基于分层思维下的架构构图逻辑。架构思维概述对于架构思维本身仍然是类似系统思维&#xff0c;结构化思维&#xff0c;编程思维等诸多思维模式的一个合集。由于架构的核心作用是在业务现实世界和抽象的IT实现之间建立起一道桥梁&…