Unity3D都有哪些坑

来源:互联网 发布:深圳华夏软件学校招生 编辑:程序博客网 时间:2024/04/28 17:16
坑1:Unity版本升级,手贱跟着升级,然后项目各种错
解决方案:
新版本先观望一段时间,新版本都有坑的。


坑2:Git做版本更新是,有些Prefab的数据死活不能同步

解决方案:
1.Edit->Project Settings->Editor 设置种打开 meta files 让meta文件和原始文件一起同步
2.Edit/ProjectSetting/Editor设置中AssetSerialization改为ForceText就行,但是我们的项目并没有解决问题,就那两个Prefab至今无解。


坑3:Mac系统上无法双开Unity
解决方案:
笨的办法呢,装两个不同版本,或者装完,拷贝一份。好一点的办法用命令行再打开一个。在好一点的,写一个shell脚本,调用命令行的打开Unity命令,已完美解决,在我另一篇文章中。


坑4:Unity打包到Android和IOS端后的StreamingAsset路径问题
string StreamingAssetPath  
{
get
{
string filePath =   
#if UNITY_ANDROID && !UNITY_EDITOR  
        "jar:file://" + Application.dataPath + "!/assets/" + flodername + "/";  
#elif UNITY_IPHONE && !UNITY_EDITOR  
        Application.dataPath + "/Raw/";  
#elif UNITY_STANDALONE_WIN || UNITY_EDITOR  
 "file://" + Application.dataPath + "/StreamingAssets" + "/" + flodername + "/";  
#else  
        string.Empty;  
#endif  
return filePath;
}
}
坑5:做UI的时候,背景图片太多,大图太多。
解决方案:切记做UI的时候美术给你什么图就用什么图,需要裁剪的,复用的,9空格的,作为技术支撑,要告诉美术新手,图该怎么做。不能怎么做。


坑6:对Unity操作不当,或者导入资源过大时,导致Unity崩溃
解决方案:当电脑内存不够是,Unity容易出现问题,甚至Crash。建议换个电脑


坑7:后期优化项目完后,没有效果,适得其反
解决方案:优化是需要把握一个度的,比如优化分为CPU,GPU和内存,我们可以牺牲内存减少CPU的调用,也可以增加GPU的消耗,减少内存。也可以将DrawCall减少到极致。但是凡事有个度,在优化的之间需要平衡各项。比如当CPU优化过度后,必定增加了GPU和内存的消耗,可能有戏不会流畅反而更卡。尤其批处理功能,不能滥用。因此:
1.内存可以牺牲,但不能太大,为了保证大多数机型的正常运行
2.CPU优化中DrawCall可以减少,但不能太多,适量减少,要不然必定增加内存。


坑8:遮挡剔除开了没用
解决方案:需要根据不同的场景,不同的游戏,修改遮挡的参数设置,默认的不适用于任何场景。


坑9:Animation占用内存较大

解决方案:合理使用,等待Unity的官方优化。


坑10:材质属性修改,导致内存增加
解决方案:当修改材质的某个参数时,Unity会为我们从新New一个,所以当需要不同参数的材质时,最好先创建好,避免在update中更新材质的某参数。


坑11:Material深拷贝问题

解决方案:Material a=b;会深度拷贝,需要注意释放的问题。或者使用SharedMatetial


坑12:图片格式选择TrueColor和16Bit,非常占内存
解决方案:
1.尽量避免使用TrueColor,比较占内存。
2.16bit虽然会吧像素压缩一般,但是导致像素不清,亲测还不如Compress
3.尽量选择Compress,Unity会对其进行压缩并且清晰度可以。亲测。
4.以上选项没能满足你,可以选择图片的FilterMode试试看。详细自己去查吧。


坑13:DestroyImmediately的使用

解决方案:
1.DestroyImmediately会立刻释放,占用系统资源,可以改为Destroy等系统空闲时统一释放。
2.Destroy也要尽量少用,因为创建和销毁都会占用系统资源。鼓励使用对象池。
3.Destroy操作很保守。例如,销毁mesh时,并不会销毁material、texture,更不会清理脚本资源。解决方案,合理做法是依赖很卡的UnloadUnusedAssets、LoadScene清理无引用资源(另注意前者是异步的),或者Bundle.Unload(true),这些方案各有限制。


坑14:System.GC的使用

解决方案:
1.Unity的堆和.net的堆不是同一个。GC释放的是.net的堆内存,所以有时候并不能达到我们的目的。而且GC调用多了也会增加CPU的消耗。
2.Unity的释放使用Resources.UnloadUnusedAsset.


坑15:欧拉角的使用。
解决方案:
1.首先欧拉角的表示较容易理解,但是弊端是效率低和万向锁。
2.可以使用四元数来代替,虽然不容易理解,但可以从欧拉角转换过来。


坑16:xxx.dll明明导入了,系统却提示没有
解决方案:
1.确认导入的是32位还是64位是否跟机型匹配。是否导入重复。
2.检查BuildSetting中API Compatibility Level选择的是.Net2.0还是.Net2.0 Subset,改为前者试试。如果是WebPlayer平台,无法选择.Net2.0


坑17:粒子系统的滥用
解决方案:粒子系统做出来的东西很炫,但是好东西不能多用。用多了系统受不了的。


坑18:Unity突然崩溃,场景没保存,Prefab没保存
解决方案:写一个编辑器脚本,在Unity意外退出时自动保存。详见我的另一篇文章


坑19:AssetBundle的使用
解决方案:
1.打包AssetBundle的资源依赖,以及解压时的资源依赖。需要自己捋清楚,否则坑死你。
2.升级到Unity5.0后,虽然自带了打包系统,但是依然需要你自己捋清依赖关系。
3.解压和使用完Asset后,记得解压的文件还在内存中,需要你去释放。
4.有些文件避免重复下载,可以使用LoadFromCache方法,但是它也有坑,用的时候小心点。


坑20:打包到移动端的项目打不开,不知道什么错
解决方案:
1.苹果端,可以在Xcode运行程序,然后看错误在那一行报错
2.安卓端,可以到处Android项目在AndroidStudio或Eclipse运行,看日志,也可以使用SDK自带的adb logcat -s Unity 功能来输出日志查询。


坑21:场景好好的,但是Scene视图却什么都看不到了
解决方案:一个同事发现这个现象,刚开始我也熟手无策,场景中物体明明在,但就是看不见。检查下Unity右上角的Layers选项,是否点击了某个层的关闭


坑22:UGUI中按钮无响应
解决方案:
1.检查按钮上方是否有图片或Panel等遮挡,屏蔽了按钮事件。
2.检查EventSystem是否不小心删掉了。


坑23:UGUI上加粒子特效的层级问题
解决方案:可以设置粒子的画布深度。或者新建画布。


坑24:Unity下使用中文名和路径
解决方案:
1.资源导入时,有中文必定出错。资源导出时中文路径不出错。
2.图片和Prefab可以使用中文,但有出错的可能性。


坑25:Unity自带脚本编辑器MonoBehavior的乱码问题
解决方案:在MonoBehavior和VS之间切换时容易出现乱码,暂无好的解决方案。最好选一个使用别乱换。


坑26:模型师的做动作导出到Unity就报错。
解决方案:让模型师检查骨骼的名字是否重复或写错。让其按照一定的规则命名。


坑27:项目越写越凌乱
解决方案:
1.重构是每时每刻进行的,不是到了最后阶段花几个月的时间进行重构。如果感觉代码已经有了坏味道,就立刻去重构,否则以后就更懒得去重构了。导致代码越来越烂。(推荐《重构》)
2.严格遵循MVC模式,组合复用等设计原则进行框架的设计。(《设计模式》)
3.单例模式不能滥用,代码之间的耦合度会增加。
4.代码的命名要有规则,养成习惯。推荐谷歌命名法和驼峰命名法。

5.多看别人的代码结构,学以致用。



转载请注明出处:http://blog.csdn.net/yupu56/article/details/53189208

仅供参考!

未完待续!

3 0
原创粉丝点击