[Unity3D]引擎崩潰、異常、警告、BUG與提示總結及解決方法

更新於  2013.12.06

此貼會持續更新,都是項目中常會遇到的問題,總結成貼,提醒自己和方便日後檢查,也能幫到有需要的同學。

若各位有啥好BUG好異常好警告好崩潰可以分享的話,請多多指教。xuzhiping7#qq.com。

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]引擎崩潰、異常、警告、BUG與提示總結及解決方法

解決方式:重裝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等參數的函數修改。否則會導致計算出錯報空異常。

詳細解決看另一篇文章:

關於NaN(Not a Number)的問題 

http://blog.sina.com.cn/s/blog_5b6cb9500101cd9e.html

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度就沒問題了。

具體還有的參考U3D官方論壇:

http://answers.unity3d.com/questions/397425/look-rotation-viewing-vector-is-zero-error.html

若沒找到解決方法再搜索下。

10.關於AssetServer

錯誤:明明上傳了所有修改,但是別人的機子卻沒有下載帶最新代碼。

原因:Merge完代碼之後,操作了ignore server change,UNITY默認是以你本機子的爲準,若此代碼沒有再次修改,則AssetServer不認爲這個東西被修改過,沒有上傳那代碼。

解決方式:打個空格重新保存一下該代碼。

11.關於數據格式的錯誤


錯誤提示:Illegal JSON sequence


解決方式

http://forum.unity3d.com/threads/143168-JsonFX-WTF-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)

解決方式http://forum.muchdifferent.com/unitypark/index.php?p=/discussion/1468/non-matching-profiler-endsample/p1



15.IOS下JIT錯誤問題、編譯錯誤、調試錯誤


IOS下JIT錯誤是比較常見的,因爲IOS不支持JIT動態編譯,所以需要改爲合適的AOT靜態編譯。

錯誤提示:Attempting to JIT compile method 'System.Linq.OrderedEnumerable`1>:GetEnumerator ()' while running with --aot-only.

解決方式

關於使用了LINQ字典排序的錯誤解決方法

http://blog.sina.com.cn/s/blog_5b6cb9500101gnrl.html

錯誤提示: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.

解決方式:角色或怪物生成時要直接給模型賦值到相應的地形位置上。因爲開始尋路組建沒有獲取到正確配置而一直報錯。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章