我打包多种类型的项目,空项目和10张放在Resources文件夹中的图为比较案例。以下是比较数据。
IPHONE:
1空项目—-空间占用量423MB—-IPA大小10MB
210张1200520无压缩Texure 单张图占用量28MB—-空间占用量702MB—-IPA大小229MB
310张1200520压缩成10241024PVRTC4 单张图占用量05MB—-空间占用量473MB—-IPA大小132MB
4 10张10241024无压缩Texture 单张图占用量4MB—-空间占用量823MB—-IPA大小146MB
510张10241024压缩为PVRTC4格式 单张图占用量05MB—-空间占用量473MB—-IPA大小116MB
宗上数据总结:
一、2的N次方大小的会得到引擎更大的支持,包括压缩比率,内存消耗,打包压缩大小,而且支持的力度非常大。
二、减小的占用大小和内存方式有:大小变化(Maxsize),色彩位数变化(16位,32位),压缩(PVRC)。
三、U3D对于的格式是自己生成的,而并不是你给他什么格式,他就用什么格式,一张10241024图在无压缩格式下,它会被U3D以无压缩文件形式存放,也就是说U3D里的Texture Preview里显示的占用大小MB不只是内存占用大小,还是空间占用大小。如下图所示:
U3D的内部机制为自动生成类型来替换我们给的,在的压缩方式上需要进行谨慎的选择。
压缩格式在U3D的Component Reference里有介绍我就不再详细介绍,只介绍几个重点的:
RGBA32格式为无压缩最保真格式,但也是最浪费内存和空间的格式。Automatic Turecolor和它一个意思。
RGBA16格式为无压缩16位格式,比32位节省一半的空间和内存。Automatic 16bits和它一个意思。
RGBA Compressed PVRTC 4bits格式为PVRTC格式,它相当于把更改了压缩方式新生成了一个来替换原来的我们给的格式(比如我们给的是PNG格式)。
注意:U3D所有的压缩格式都会以另一种方式来存储,不会以你给的方式来存储,只有你指定了某种格式,它才会转成你要的格式。而且压缩格式在Android里并不一定有效,因为Android的机型多,GPU的渲染方式也不一样,有的是Nvidia,有的是PowerVR,最最好的在安卓机子上启用RGBA16方式,因为这个是适应所有机型的,并且比32位占用量少一半,但也需要因项目而异,只是推荐使用的格式,可以多用据说,不是专业版的不能够使用movietexture(应该是这么写的吧),就是用一个视频文件做贴图,这样假如说在一个山上某处放一个这样的贴图文件,就可以了。
我用的是免费版的,做不到这样,你可以试试看用Unity3D自带的water预设物,把这个拖到一个BOX上面会出现水纹的效果,然后变形,放到山上某处,模拟一个瀑布了。
以上方法不见得好,但是个人认为至少比起粒子系统好一点,建议尝试一下。
新手自学,如果见解不当,请指正,非常感谢。据我所知,一些特效其实也是粒子系统,只不过做得很好。
可以试试看将特效先设置为一个预设物,然后设置预设物的动作(如各一个推力等等)就可以了。
如果没有理解题意或者回答有问题,请看到的人告诉我一下,谢谢。
作为拥有一个10游戏行业经验,5年Unity开发工作,目前任职Unity讲师的人,我觉得我的答案可以给你一定的参考性。大致的给你归纳一下:
首先系统性学习C#,其中的内容大致包括:
变量
类型
循环判断
枚举、结构体
数组、字符串
函数
调试与异常的处理
面向对象中的封装继承多态
泛型、接口、抽象类
委托、匿名方法、事件
IO *** 作,网络 *** 作
在学习上述内容时,可以结合Unity进行调试。也可以直接用vs命令行来进行学习查看运行结果。
学习Unity,其中的内容大致如下:
场景
坐标系
资源导入
摄像机、Gameobject与预设
UGUI中各种组件的使用
灯光系统
烘焙系统
纹理、材质、渲染器。
地形系统
角色控制系统
物理引擎
粒子系统
动画系统
射线检测
音效系统
学习到这里,你就已经对Unity进入中级的水平,当然在Unity学习的过程中一定要做大量的练习,以加深各知识点的垂直深入。
后面你就可以学习高阶内容了,比如Shader等其他方面的东西了。
可以尝试吧assets设置成预设物(prefab)。新建一个prefab,把想要重用的东西拖拽到上面。
如果想要重用,就把这个prefab拖到某一个位置就可以了。
(有些具体的东西比如脚本的公有量可能需要重新设置)
新手自学,如果见解不当,希望指正,非常感谢。可以尝试:
将cube设置为预设物
再某一个脚本中设计计时器,每个五秒钟重新实例化一个预设物。
预设物实例化的方法:GameObject object= (GameObject)Instantiate(预设物名字);//创建预设
计时器的方法:
timer -=Time deltaTime ;
if( timer <=0)
{
//工作,例如出现cube
timer=5;//刷新为5秒钟
}
新手自学,如果见解不当,希望指正,如果有好方法,希望告知,多谢。你如果想把其中一个项目的东西放到另一个下面、可以拖成一个prefab、然后点击右键、有一个Export Package选项、导出资源包、再把这个资源包 导到另一个项目下、相关的脚本什么的都会导进去的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)