unity3d异常和错误处理的例⼦
1.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),WINDOW下的可以选WINDOWS的格式,两边都要⽤的话,推荐选CR。
BUG:IOS下,游戏中的中⽂显⽰乱码。
解决⽅式:同上,修改改代码页的编码。UNICODE(UTF8代签名)MACINTOSH(CR)
3.中⽂界⾯解决问题。
monodevelop中⽂显⽰解决⽅法:
中⽂Mac系统下MonoDevelop乱码解决:
4.安装空项⽬报错
不知道怎么地,在IOS试过⼀次空项⽬也在错误提⽰。⼤概是说什么“不到需要的⽅法”。
重装⼀下就好了,估计是UNITY⽂件损坏或者安装不完全出错了。重装吧。
错误提⽰:MissingMethodException: Cannot find the requested method.
估计是破解U3D造成的,该破解⽂件可能是不⽀持WIN7下的……
解决⽅法:
1、换正版。
2、换个破解⽂件。
5.平台编译错误或库引⽤缺失
错误提⽰: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?)
出了这个错误⼀般有两个原因了。
1.没有引⽤相关的库。
2.选错编译平台。(BuildSetting⾥⾯的Platform)
错误提⽰:Could not start compilationWin32Exception:ApplicationName="",……
解决⽅式:重装UNITY3D。
6.内存资源加载错误问题
错误提⽰:Trying to reload asset from disk that is not stored on disk
个⼈是在加载多个ASSETBUNDLE时,⽤了释放镜像之后,发⽣了下⾯的BUG。
这个警告它并没有对游戏流程有任何影响,不过⼀直跳出来很烦⼈。我们项⽬中是因为⽤Dictionary删除的时候没有删除完整导致的。
个⼈认为⽐较⼤可能是下⾯的原因:
还没释放完镜像再次加载就出BUG了。将所有ASSETBUNDLE加载完后再同⼀释放,这样就没问题了。
Unity will only allow you to have a single instance of a particular AssetBundle loaded at one time in your application. What this means is that you can't retrieve an AssetBundle from a WWW object if the same one has been loaded previously and has not been unloaded. In practical terms it means that when you try to access a previously loaded AssetBundle like this:
查阅了⼀下,貌似还有别的问题能导致这提⽰。下⾯是相关可以继续深⼊的资料,可以帮助⼤家理解U3D的加载和内存管理:
百度搜⼀下下⾯两篇⽂章,应该是出⾃圣典论坛:
1.【全⾯理解Unity加载和内存管理】
2.【全⾯理解Unity加载和内存管理机制之⼆:进⼀步深⼊和细节】
貌似⽼外也没完全确切搞定这个。
错误提⽰:Deleting persistent object without writing it first
不论如何你都不应该直接修改⼀个从assetbundle加载进来的最初数据,⼀般都要先实例化出来再对其修改。但是引⽤的东西(例如mesh),这些也不能修改它。若要修改的话,则先复制⼀份出来。
//复制⼀份模型出来重新复制,以免直接修改被引⽤的镜像模型。如下:
Mesh temp = Mesh.Instantiate(smr.sharedMesh) as Mesh;unity3d animation
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.动画错误
这个错误是4.0新引进动画系统才出现的。
错误提⽰:Mecanim: BindSkeleton: Cannot find transform"objectname"
解决⽅式:
1.到该对应transform"objectname"的模型,直接在检索⾯板搜索所有相应名字,能容易到。
2.将模型的⾯板的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错误问题、编译错误、调试错误
IOS下JIT错误是⽐较常见的,因为IOS不⽀持JIT动态编译,所以需要改为合适的AOT静态编译。
错误提⽰:Attempting to JIT compile method 'System.Linq.OrderedEnumerable`1>:GetEnumerator ()' while running with --aot-only.
错误提⽰: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读取是不适应的。得注意打包的环境。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。