最新文章
Cocos2d-x游戏开发实例详解7:对象释放时机
03-25 13:59
Cocos2d-x游戏开发实例详解6:自动释放池
03-25 13:55
Cocos2d-x游戏开发实例详解5:神奇的自动释放
03-25 13:49
Cocos2d-x游戏开发实例详解4:游戏主循环
03-25 13:44
Cocos2d-x游戏开发实例详解3:无限滚动地图
03-25 13:37
Cocos2d-x游戏开发实例详解2:开始菜单续
03-25 13:32
unity3d异常和错误处理的例子
以下是一些Unity3D异常和错误处理的例子,希望对大家有所帮助。
1. U3D莫名崩溃
U3D经常会莫名崩溃,一般是由于空异常造成的。开发者需要多多检查自己的引用是否为空指针。
2. 编码切换警告提示
警告内容
Some are Mac OS X (UNIX) and some are Windows.
This might lead to incorrect line numbers in stacktraces and compiler errors. Many text editors can fix this using Convert Line Endings menu commands.
原因及解决办法
这是编码格式问题。如果使用VS,可直接在高级保存方案里面修改。一般推荐选择UNICODE(UTF8带签名)MACINTOSH(CR),若在Windows下,也可以选择Windows的格式;如果两边都要使用,推荐选CR。
IOS下中文显示乱码
解决方式与上述编码问题相同,修改代码页的编码为UNICODE(UTF8带签名)MACINTOSH(CR)。
3. 中文界面解决问题
MonoDevelop中文显示解决方法
4. 安装空项目报错
错误现象
在IOS上试过一次,空项目也会出现错误提示,大概是说“找不到需要的方法”。
MissingMethodException: Cannot find the requested method.
可能原因及解决办法
- 原因一:可能是UNITY文件损坏或者安装不完全。解决办法是重装UNITY。
- 原因二:估计是破解U3D造成的,该破解文件可能不支持WIN7。解决方法如下:
- 换正版。
- 换个破解文件。
5. 平台编译错误或库引用缺失
错误提示1
error CS1061: Type `System.IO.FileInfo' does not contain a definition for `Delete' and no extension method `Delete' of type `System.IO.FileInfo' could be found (are you missing a using directive or an assembly reference?)
原因
- 没有引用相关的库。
- 选错编译平台(BuildSetting里面的Platform)。
错误提示2
Could not start compilationWin32Exception:ApplicationName="XXXX\\mono.exe",……
解决方式
重装UNITY3D。
6. 内存资源加载错误问题
错误提示1
Trying to reload asset from disk that is not stored on disk
问题描述
个人在加载多个ASSETBUNDLE时,用了释放镜像之后,出现了此警告。该警告虽对游戏流程无影响,但一直跳出很烦人。在项目中,此问题是因为用Dictionary删除的时候没有删除完整导致的。
可能原因及解决办法
较大可能是还没释放完镜像就再次加载从而出现BUG。解决办法是将所有ASSETBUNDLE加载完后再统一释放。
Unity规定在应用程序中同一时间只能有一个特定AssetBundle的实例被加载。也就是说,如果同一个AssetBundle之前已经被加载且未卸载,就不能从WWW对象中检索它。
相关资料
可百度搜索以下两篇文章(出自圣典论坛),帮助理解U3D的加载和内存管理:
- 【全面理解Unity加载和内存管理】
- 【全面理解Unity加载和内存管理机制之二:进一步深入和细节】
错误提示2
Deleting persistent object without writing it first
解决办法
不论如何都不应该直接修改一个从assetbundle加载进来的最初数据,一般要先实例化出来再对其修改。对于引用的东西(例如mesh),也不能直接修改,若要修改,则先复制一份出来。示例代码如下:
Mesh temp = Mesh.Instantiate(smr.sharedMesh) as Mesh;
myMesh.sharedMesh = temp;
7. 时间错误、NaN错误
错误提示
transform.position assign attempt for 'XXX' is not valid。Input rotation is {NaN, NaN, NaN, NaN}.
原因及解决办法
一般是由于游戏暂停将timescale设为0引起的,需要寻找相应用了Time.deltTime等参数的函数进行修改,否则会导致计算出错报空异常。
8. 动画错误
错误提示
Mecanim: BindSkeleton: Cannot find transform"objectname"
解决方式
- 找到对应transform "objectname"的模型,直接在检索面板搜索所有相应名字,能容易找到。
- 将模型的面板的Rig部分的动画AnimationType改为none。
9. 坐标系向量计算的错误提示
错误提示
Look rotation viewing vector is zero
解决方式
一般是由于摄像机的旋转角度造成的,也可能是向量的计算多余而系统提示。在项目中,强制摄像机90度的时候出现此问题,改成89.9度就没问题了。
10. 关于AssetServer
错误现象
原因
Merge完代码之后,操作了ignore server change,UNITY默认是以本机的为准,若此代码没有再次修改,则AssetServer不认为这个东西被修改过,没有上传该代码。
解决方式
打个空格重新保存一下该代码。
11. 关于数据格式的错误
错误提示
Illegal JSON sequence
12. 导出WINDOS平台下的项目运行不成功
错误提示
没有找到相应assetbundle的路径
解决方式
因为用了assetbundle加载,而游戏在有中文路径下,assetbundle的路径不能有中文。换个无中文的目录即可,目前从根源上能解决的方案暂时没有。
13. 导入资源出错
错误提示
Error while importing package :Couldn't decompress package
解决方式
导入资源出错,大部分是中文路径惹的祸。将资源换到无中文路径试试,如C/D盘根目录。
14. 效率调优报错
错误提示
Non matching Profiler.EndSample (BeginSample and EndSample count must match)
15. IOS下JIT错误问题、编译错误、调试错误
JIT错误
IOS下JIT错误比较常见,因为IOS不支持JIT动态编译,所以需要改为合适的AOT静态编译。
错误提示1
Attempting to JIT compile method 'System.Linq.OrderedEnumerable`1>:GetEnumerator ()' while running with --aot-only.
错误提示2
Installation of apps is prohibited by a policy on the device
解决方式
打开一个开关,允许在安装APP,路径为“设置 -> 通用 -> 访问限制 -> 安装应用程序”。
16. U3D寻路信息错误
错误提示
"XXXX" can only be called on an active agent that has been placed on a NavMesh.
解决方式
角色或怪物生成时要直接给模型赋值到相应的地形位置上,因为开始寻路组件没有获取到正确配置而一直报错。
17. Assetbundle资源版本不对
团队协作时,可能会有人使用的U3D版本与其他人不一样,这需要事先协定好,大家要用同样的版本作为开发基础。
解决方式
关于assetbundle的问题,4.1版本打出来的包,在4.2读取是不适应的,需要注意打包的环境。