unity在关闭时总是发生崩溃,有unity崩溃日志在哪,求大神帮助解决下~ [version: Unity 5.3.5p3_4c1fbb057dc3]

当前位置: >
Unity3D引擎崩溃、异常、警告、BUG与提示总结及解决方法
时间: 14:23 来源:Unity之家 作者:unity.jb51.net 浏览:
1.Unity3D经常莫名奇妙崩溃。一般是由于空异常造成的,多多检查自己的引用是否空指针。2.编码切换警告提示。警告提示:Some are Mac OS X (UNIX) and some are Windows.This might lead to incorrect line numbers in stacktraces andcompiler errors. Many text editors can fix this using Convert LineEndings menu commands.编码格式问题,VS的话直接高级保存方案里面修改,一般我选的是UNICODE(UTF8代签名)MACINTOSH(CR),WINDOW下的可以选WINDOWS的格式,两边都要用的话,推荐选CR。3.中文界面解决问题。monodevelop中文显示解决方法:/bbs/read.php?tid-78563.html中文Mac系统下MonoDevelop乱码解决: http://blog.csdn.net/ssihc0/article/details/6796118 4.安装空项目报错不知道怎么地,在IOS试过一次空项目也在错误提示。大概是说什么“找不到需要的方法”。重装一下就好了,估计是UNITY文件损坏或者安装不完全出错了。错误提示:MissingMethodException:&Cannot&find&the&requestedmethod.估计是破解Unity3D造成的,该破解文件可能是不支持WIN7下的。解决方法:换正版或换个破解文件。5.平台编译错误或库引用缺失错误提示:error&CS1061:&Type&`System.IO.FileInfo'&does&not&containa&definition&for&`Delete'&and&no&extension&method&`Delete'&of&type`System.IO.FileInfo'&could&be&found&(are&you&missing&a&usingdirective&or&an&assembly&reference?)出了这个错误一般有两个原因了。&&&&1.没有引用相关的库。&&&&2.选错编译平台。(BuildSetting里面的Platform)&&&&错误提示:Could not startcompilationWin32Exception:ApplicationName=“XXXX\mono.exe”,……&&&&解决方式:重装UNITY3D。6.内存资源加载错误问题错误提示:Trying to reload asset from disk that is not stored ondisk个人是在加载多个ASSETBUNDLE时,用了释放镜像之后,发生了下面的BUG。这个警告它并没有对游戏流程有任何影响,不过一直跳出来很烦人。我们项目中是因为用Dictionary删除的时候没有删除完整导致的。解决方案参考:.cn/s/blog_5b6cbipi.html个人认为比较大可能是下面的原因:还没释放完镜像再次加载就出BUG了。将所有ASSETBUNDLE加载完后再同一释放,这样就没问题了。Unity will only allow you to have a single instance of aparticular AssetBundle loaded at one time in your application.&Whatthis means is that you can't retrieve an AssetBundle from a WWWobject if the same one has been loaded previously and has not beenunloaded.&In practical terms it means that when you try to access apreviously loaded AssetBundle like this:(BY:/Documentation/Manual/keepingtrackofloadedassetbundles.html)国外论坛的讨论:/threads/49298-Trying-to-reload-asset-from-disk-that-is-not-stored-on-disk貌似老外也没完全确切搞定这个。错误提示:Deletingpersistent object without writing it first不论如何你都不应该直接修改一个从assetbundle加载进来的最初数据,一般都要先实例化出来再对其修改。但是引用的东西(例如mesh),这些也不能修改它。若要修改的话,则先复制一份出来。复制一份模型出来重新复制,以免直接修改被引用的镜像模型。如下: Mesh&temp&=&Mesh.Instantiate(smr.sharedMesh)&as&M&&&&
  myMesh.sharedMesh&=&
(责任编辑:脚印)
免责声明:Unity之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。
猜你也喜欢看这些 ??????
其他类型的开发经验 ??????程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
Unity3D研究院之在发布版本屏蔽Debug.log输出的Log(七十)
Unity3D研究院之在发布版本屏蔽Debug.log输出的Log(七十)
围观34271次
编辑日期: 字体:
写在前面的话, unity5.3支持了运行时关闭产生的debug.log
Debug.logger.logEnabled = false;
在开发Unity的时候,在输出log的时候大家都会采用Debug.log()的方式来输出Log,但是游戏发布的时候这样的Log是不能关闭的,在用户手机运行产生一堆LOG也不是啥好事,一定要关闭才行、主要是unity官方也没有提供直接关闭的方法。
Debug.Log("雨松MOMO");
既然官方没提供方法,那么我们就得自己想办法。于是我写了一个类把Debug.log包了一层。
12345678910111213141516171819202122232425262728293031323334353637383940
using UnityEngine;using System.Collections;&public class Debuger&&{& static public bool EnableLog = false; static public void Log(object message) {
Log(message,null); } static public void Log(object message, Object context) {
if(EnableLog)
Debug.Log(message,context);
} } static public void LogError(object message) {
LogError(message,null); } static public void LogError(object message, Object context) {
if(EnableLog)
Debug.LogError(message,context);
} } static public void LogWarning(object message) {
LogWarning(message,null); } static public void LogWarning(object message, Object context) {
if(EnableLog)
Debug.LogWarning(message,context);
这样我程序在输出Log的时候,我就不调用Debug.Log()了,我使用我新写的这个类。
void Start ()
Debuger.EnableLog = true;
Debuger.Log("雨松MOMO"); }
但是这样问题又来了,因为我如果直接这样写的话,如下图所示,当我输出Log以后,我在Console窗口中双击Log 这时候代码会定位在Debuger这个类的Log方法,这太麻烦了我需要定位在调用Debuger.log()的方法上。
为了解决这个问题,我们可以把Debuger类做成一个dll,在终端里面输入如下代码 。。
mcs -r:/Applications/Unity/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll -target:library ClassesForDLL.cs
如果你要把多个.cs文件做成一个dll的话,那么在终端里用空格把你的.cs文件分开即可,于是我在终端里面输入,参数 就是我的cs的完整路径。
mcs -r:/Applications/Unity/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll -target:library /Users/MOMO/test13/Assets/Debuger.cs
执行完毕后,会自动的在你脚本的平级路径下生成一个同名的dll文件。 在把Debuger.cs文件删除,保留Debuger.dll就可以了。
如果你的版本正式发布, 你只需找一个合适的地方调用enableLog = true就可以。
Debuger.EnableLog = true;
开始我想的是在Debuger类里面直接用 #if define这样的标签来做,后来我发现很多问题出现在正式版本里,一旦使用预定义标签编译那么除非重新打包不然是觉对看不到LOG。所以干脆就直接用一个静态变量来标记是否打开Log方便。这样可以让服务端做一个密令一类的东西, 正式版也能让客户端把LOG打开。。
如果你确定你的项目不会出问题,不需要运行时产生log.那么最好使用Conditional, 参数就是条件编译的预定义标签,下面的DEBUG 就是在unity projectsetting 里面 声明 预定义标签, 当然你也可以自己去定义这些标签。这样在调用方法的时候就不会去执行 方法体的内容。。
需要引入头文件
using System.D
[Conditional ("DEBUG")] static public void Log(object message, Object context) {
Debug.Log(message,context); }
最后我把这个简单的DLL上传一下,大家下载下来就可以直接用了。。或者你也可以按照本文的方法自己来封装。
下载地址:
本文固定链接:
转载请注明:
雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!

我要回帖

更多关于 unity ios 崩溃 的文章

 

随机推荐