2015年5月31日 星期日

【Unity3D】錯誤訊息與解決方式 - Exception

這裡記錄有關於Unity3D開發時所會遇到的狀況,這裡會一直更新。
目前的錯誤量比較少,會慢慢的增加並提供簡易的解決方案。
包含C#、Unity3D、PhotonServer、COM+、NGUI。

*測試環境:Visual Studio 2013 Community、.Net 3.5、Unity3D 4.6.5、UnityVS 1.9 (Visual Studio Tools for Unity 1.9)、Photon Server 3.4.5.2597、NGUI 3.8.0
*更新日期2016/07/03

C#

1.在進行解析JSON字串時必須將Dictionary<string, object>的value使用為"object"型態,否則會產生not set to an instance.

2.在多層JSON轉換Dictionary時,必須使用object替代第2層還沒解析的JSON。Dictionary<int,object>

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Unity3D

1.未知的錯誤。UnauthorizedAccessException: Access to the path "Library\UnityAssemblies\UnityEngine.xml" is denied.

解決方法:關閉VisualStudio、更新Unity3D(完整移除、重新安裝)




2.輸出含有DLL的Unity3D專案時。Unhandled Exception: System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded.

解決辦法:使用相同版本的DLL(.net 3.5與.net4不能混用),包含輸出的DLL(Photon、自訂)等所使用的版本與在Unity3D內的DLL,關閉防毒軟體防火牆。

3.不一致的存取範圍 參數型別 比方法 存取範圍低。
解決辦法:將未宣告的class加上public。請注意在C#未宣告的Calss為protected在編譯的時候如果與另外一個引用的的class存取範圍不同可能解釋為private而出現錯誤。MSDN:https://msdn.microsoft.com/zh-tw/library/4sscdk02.aspx?f=255&MSPPError=-2147217396

4.System.NullReferenceException: 並未將物件參考設定為物件的執行個體。
解決辦法:努力的找哪邊忘記new了一定是這個問題。

5.Android LoadLevel時,明明就有設定還是沒辦法載入關卡。Level '' (0) couldn't be loaded because it has not been added to the build settings.
解決辦法:專案重建!!

6.Collider2D發生沒有啟動現象。把Collider2D.enable=true移至Start,原因詳見下圖啟動順序。

7.串接官方Facebook Plugin安裝OpenSSL後發生Crash
解決辦法:如果下載到http://slproweb.com/products/Win32OpenSSL.html的OpenSSL請改由http://indy.fulgan.com/SSL/下載即可正確執行

8.使用Facebook.MiniJSON時發生未知錯誤(object not set to an instance of an object)。
解決方法:請自行使用MiniJSON.Json來解析字串,Facebook自帶Util怪怪的。

9.Build Install APK時。Unable to install APK! Installation failed with the following output:pkg: /data/local/tmp/Package.apk Failure[INSTALL_FAILED_VERSION_DOWNGRADE]
解決辦法:如果在原先使用版本號為"1",下一次Build時版本號改為"1.0.0"(這個版本號其實是0)或較小版本號時會發生無法安裝的錯誤。

10.Building Error: Not a file  UnityEditor.HostView:OnGUI()。更新SDK重開機,在keystore重新選擇key並且commit。

11.A script behaviour has a different serialization layout when loading. (Read 24 bytes but expected 48 bytes) Did you #ifdef UNITY_EDITOR a section of your serialized properties in any of your scripts?

解決辦法:第一種可能在腳本中把屬性欄位加上了#if UNITY_EDITOR導致報錯;第二種可能是載入Assetbundle和編輯器中所使用的不同(更新Perfab後沒重新打包),重新打包即可。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Photon Server

1.建立與作業系統不同的PhotonServer。Service shutting down: failed to start application. Errorcode: 108
解決辦法:建立與作業系統相同的PhotonServer,VisualStudio>方案總管>方案>屬性>建置>目標平台(x86 x64)。

2.發生未知的COM+ 1.0 目錄錯誤
解決辦法:控制台>系統管理工具>元件服務>COM+>移除COM+元件>重新安裝

3.伺服器、COM+元件,發生例外情況卻不知道程式碼哪裡出錯。
解決辦法:使用try/catch/throw丟出例外情況。

4.Connect failed. 關閉防火牆、開啟防火牆Port 5055、開啟Port Mapping映射

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


NGUI

1.在NGUI中點擊物體沒有反應。
解決辦法:把UICamera改成3D World

2.Too many vertices on one panel: 72804
解決辦法:UISprite上的Size越大會增加頂點數量導致超出使用上限。小圖再放大時使用Scale減少頂點數量的使用。


----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Google Play Services

Cannot corvent to dex-format:Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms
解決辦法:移除GooglePlayGames資料夾下重複的libs
e.g. play-services-xxx-x.x.x

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Unity3D

在Hierarchy中的物件如果沒有預製程Prefabs有可能在GameObject.Find等類似方法有機率找不到。
詳見Unity載入順序。

0 ♥:

張貼留言