您好,欢迎来到Unity之家!   unity.jb51.net 
  • 首 页
  • 你问我答
  • 当前位置:首页 > 程序开发 > 开发经验 >
    unity开发项目中,引擎崩溃、异常、警告、BUG与提示总结及解决方
    时间:2015-04-20 10:11 来源:Unity之家 作者:unity.jb51.net 浏览:收藏 挑错 推荐 打印



    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中文显示解决方法:

    http://www.cocoachina.com/bbs/read.php?tid-78563.html


    中文Mac系统下MonoDevelop乱码解决:

    http://blog.csdn.net/ssihc0/article/details/6796118



    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="XXXX\mono.exe",……

    解决方式:重装UNITY3D。



    6.内存资源加载错误问题


    错误提示:Trying to reload asset from disk that is not stored on disk


    个人是在加载多个ASSETBUNDLE时,用了释放镜像之后,发生了下面的BUG。

    这个警告它并没有对游戏流程有任何影响,不过一直跳出来很烦人。我们项目中是因为用Dictionary删除的时候没有删除完整导致的。


    解决方案参考:http://blog.sina.com.cn/s/blog_5b6cb95001019ipi.html


    个人认为比较大可能是下面的原因:


    还没释放完镜像再次加载就出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:

    (BY :http://docs.unity3d.com/Documentation/Manual/keepingtrackofloadedassetbundles.html)



    查阅了一下,貌似还有别的问题能导致这提示。下面是相关可以继续深入的资料,可以帮助大家理解U3D的加载和内存管理:

    百度搜一下下面两篇文章,应该是出自圣典论坛:

    1.【全面理解Unity加载和内存管理】

    2.【全面理解Unity加载和内存管理机制之二:进一步深入和细节】


    国外论坛的讨论:

    http://forum.unity3d.com/threads/49298-Trying-to-reload-asset-from-disk-that-is-not-stored-on-disk


    貌似老外也没完全确切搞定这个。



    错误提示: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.动画错误

    这个错误是4.0新引进动画系统才出现的。

    错误提示:Mecanim: BindSkeleton: Cannot find transform"objectname"


    解决方式:

    1.找到该对应transform"objectname"的模型,直接在检索面板搜索所有相应名字,能容易找到。

    2.将模型的面板的Rig部分的动画AnimationType改为none



    (责任编辑:脚印)
    免责声明:Unity之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。
    标签:Unity之家