Unity4.x/5.x/2017.x升級差異總結


目前整理Unity4.x 項目升級Unity5.x以及Unity2017.x 過程中出現的各種常見異常問題,與大家經驗共享。按照問題出現的版本分為Unity5.x 升級到Unity2017.x 以及Unity4.x 升級到Unity5.x 兩種情形進行總結:

 

  • Unity5.x 升級 Unity2017.x 容易出現的問題:

問題1: Unity開發導航尋路的源代碼中原本定義的”NavMeshAgent” 類,系統已經不再識別?

解答: 

 應該是從Unity5.6以上版本,導航尋路中的大量API類,已經封裝到新的命名空間“UnityEngine.AI”下。也就是說程序開頭使用Using 導入命名空間UnityEngine.AI即可。

 

問題2:  項目升級到Unity2017.x 過程中,源代碼中的“Application.LoadLevelAsync()”(也包括“Application.LoadLevel()”) 系統提示已經過時, 如何處理?

解答:

這個問題應該是Unity5.3以上版本就已經發生了變化。以上腳本可以通過導入“Using UnityEngine.SceneManagement”命名控件,然后改為如下代碼:

      SceneManager.LoadSceneAsync("");//異步場景轉換

      SceneManager.LoadScene("");     //同步場景轉換

 

問題3: 項目升級到Unity2017.x 導航尋路失效,不再有反應?

解答;

Unity5.6之后的版本,其導航尋路的底層API做了重寫,所以原本導航尋路的NavMesh 是需要重新做導航烘焙才可解決。



問題4: 項目升級到Unity2017.x 后,烘焙的場景變得格外高亮(不正常)?

  解答:

Unity2017.x 的光影系統內部Shader等算法進一步優化與改善,所以在Unity5.x 中烘焙的場景應該再次重新烘焙,就可顯示正常光影效果。

 

  •  Unity4.x 升級Unity5.x 容易出現的問題:

問題1:Unity4.x 項目升級到Unity5.x 中, 3D模型其材質丟失,成為“白模”?

解答;

Unity5.x(包含Unity2017.x)中對於材質采用基於物理着色(PBS)的材質系統,所以3D模型升級后需要手工重新賦值材質與貼圖等。

 

問題2:Unity4.x 項目中的NavMesh 升級報錯:“NavMesh asset format has changed. Please rebake the NavMesh data.”?

解答;

  按照字面含義,重新對靜態物體進行新的導航烘焙即可。

 

問題3: Unity4.x 項目天空盒子升級后顯示混亂?

解答;

找到項目中“標准資源”(Standard Assets),點擊天空盒子的材質,出現提示信息“This texture contains alpha, but is not RGBM(Incompatible with HDR[高動態光照渲染])”點擊“Fix Now”進行自動修復即可。。

 

問題4: Unity4.x 在升級后出現某些3D模型不顯示的“嚴重”問題?

 解答;

由於Unity5.x 與Unity4.x版本的底層編碼變化較大,Unity5.x已經不能正確識別部分老“預設”,從而造成不顯示問題。此時我們找到對應模型的“原型”3D模型,重新建立“預設”在場景中的原位置進行重新加載即可。(注意與原來的方位需要一致才可以)。

 

問題5: Unity4.x 項目升級后部分Animation動畫失效(即:不動沒有反應)?

解答;

我們把Animation動畫在Unity5.x中重新編輯與應用即可。

 

問題6: Unity4.x 的布料模擬升級到Unity5.x 無法應用,也找不到原來的組件了?

解答:

Unity5.x (包含Unity2017.x)中廢棄了Interactive Cloth 與Cloth Renderer 組件,轉而使用Cloth 與Skinned Mesh Rederer 組件代替。(注:詳情請查閱本書籍11.5.5章節)

 

  • 腳本問題匯總, 由於腳本升級過程中造成的各種異常現象匯總如下:
  1. 光標鎖定腳本

Screen.lockCursor = true; //Unity4.x傳統寫法

Cursor.lockState = CursorLockMode.Locked;//Unity5.x(2017.x)等價替換

  2. 腳本AddComponent()、GetComponent() 問題

例如1:

GoNeedAddScriptsObj.AddComponent("類名稱");// Unity4.x傳統寫法

          GoNeedAddScriptsObj.AddComponent();//必須用泛型代替。

例如2:

GoCreatObj.Renderer.Material.color=Color.red;// Unity4.x傳統寫法

   GoCreatObj.GetComponent().material.color = Color.red//Unity5.x(2017.x)等價替換

例如3:

AddComponent(“腳本字符串”);Unity4.x 中這種API寫法,可以實現動態加載腳本功能。而到了Untiy5.x 被否決禁止使用,替代寫法如下: GoNeedObj.AddComponent(System.Type.GetType(“腳本字符串”);

 3. 腳本Animation 播放動畫問題

例如:

this.animation.Play("xxx"); // Unity4.x傳統寫法

          this.GetComponent().Play("xxx"); // Unity5.x(2017.x)等價替換

4.腳本剛體組件寫法

例如:

           con.gameObject.collider.xx(); // Unity4.x傳統寫法,已經被否決。

           con.gameObject.GetComponent().xxx();//Unity5.x(2017.x)等價替換

   5. 關於AssetBundle錯誤信息

   報錯信息: “UnityEngine.AssetBundle.Load(string)' is obsolete: `Method Load has been deprecated. Script updater cannot update it as the loading behaviour has changed. Please use LoadAsset instead and check the documentation for details.”

         解答:分析以上錯誤信息表明AssetBundle.Load(“”) 這個API已經否決不再允許使用。替代寫法是:AssetBundle.LoadAsset (“”)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM