Unity3d使用心得(2):Unity3d 動態下載動畫資源——AnimationClip 的使用
轉載請保留來源:http://www.cnblogs.com/dongliang/
引言:
在使用 Unity3d 開發微端、或者網頁游戲的時候經常需要將資源打包成 AssetBundle ,然后通過 www 的方式動態的下載資源。今天要分享的是我再動態下載 Animation 骨骼動畫的時候走的一些彎路和自己最后的解決方案。我們的項目中的動畫資源有上百套之多,每一套動畫大概在300KB 到 900KB 之前,所以有一個很重要的需求就是動態的下載需要的動畫。
錯誤的方法:
我看到需求后想到的第一種方法是將 FBX 倒入的 Prefab 實例化,將其中的 Animation 通過 ScriptObject 保存成Asset文件,然后導出成 AssetBundle 文件。在游戲運行的時候將下載回來的 Animation 組件賦值給對應的 GameObject 的 Animation 變量中。悲劇的是我在這個時候才發現 Animation 存取器是只讀的。
正確的做法:
導出 Animation 中的 所有AnimationClip 對象作為數組添加到 ScriptObject 中,保存成Asset文件,然后導出成 AssetBundle 文件。在游戲運行時,將下載回來的Clip對象添加到 Animation組件當中完成動畫的動態加載。
AnimationClip 中包含了動畫的數據,可以靈活的從Animation中添加刪除。
另一個看似可行的方法:
將 Fbx 倒入的 Prefab 實例化的游戲對象中,占用空間較大的數據 —— SkinnedMeshRenderer 組件中 Mesh(網格數據)、Shader 中的 Texture 分別導出成AssetBundle,將刪除了這兩個數據的剩余的 GameObject 連同動畫一起打成一個Prefab,在運行的時候動態的拼裝。如果項目中的動態下載角色資源的方式是這種方式的話,可以在一定程度上的繞開前文中遇到的問題。但是前一種解決方案是比較准確解決問題的一種方案。
源代碼:
文中提到的 導出AssetBundle 、ScriptObject等知識點,都是Unity3d比較基礎的用法,在這里就不列舉具體的代碼了。有需要幫助的朋友可以給我發私信。