Unity3D引擎崩潰、異常、警告、BUG與提示總結
阿新 • • 發佈:2019-01-10
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等引數的函式修改。否則會導致計算出錯報空異常。 詳細解決看另一篇文章: 關於NaN(Not a Number)的問題 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官方論壇: 若沒找到解決方法再搜尋下。 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. 解決方式: 關於使用了LINQ字典排序的錯誤解決方法 錯誤提示: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讀取是不適應的。得注意打包的環境。
解決方式:重灌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)的問題 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官方論壇: 若沒找到解決方法再搜尋下。 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. 解決方式: 關於使用了LINQ字典排序的錯誤解決方法 錯誤提示: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讀取是不適應的。得注意打包的環境。