3D网页游戏场景打包与加载
3D游戲中,一個場景往往斗勁大,若是游戲的進行須要下載一個10M甚至更大的場景時,加載所用的時候會導致很大項目組玩家的流失。
我們知道Unity3D中的內置地形是應用一張高度圖,對其地形進行打包今后,發明<=100KB。那么若是采取Unity3D的內置地形作為游戲中的地形時,起首加載地形并顯示,再去加載場景中的部件(比如樹、房子等),將會很有需要。
在加載場景中的部件時,可以按照玩家當前地點的地位,由近到遠的去加載。場景中的每個部件實際上并不都是獨一無二的,比如一棵一模一樣的樹,可能同一個場景中呈如今很多處所,不合的只是樹的地位信息,那么在加載場景的時辰則只須要加載一個樹的模型,并記錄下N個樹的transform信息,將會大大的削減場景所占的空間。
若是模型的重用率較高,那么這個題目的解決將會成倍的削減一個場景所占的空間。景在加載時,也只須要下載一個樹的模型,并按照transform信息,在指定的地位復制出N棵樹即可。在應用Unity3D的BuildPipeline進行打包之前,須要遍歷一遍所選文件夾下的場景文件,若是文件的MeshFilter的Mesh為在該文件夾中只呈現了一次,則申明該模型在場景中沒有反復,則記錄下該模型文件的transform信息,并打包。
若是該Mesh呈現的次數大于一次,則記錄下這些和該Mesh雷同的模型的transform信息,打包時包含一個模型和多個transform信息
在Unity3D中有個名為ScriptableObject的類,可以哄騙它來存儲本身所需的各類百般的資料。
public class TransformHolder : ScriptableObject
| ? | ? | ? |
?
| 01 | { |
| 02 | ? |
| 03 | ??? public int Length; |
| 04 | ? |
| 05 | ??? public Vector3[] position; |
| 06 | ? |
| 07 | ??? public Quaternion[] eulerAngles; |
| 08 | ? |
| 09 | ??? public Vector3[] localScale; |
| 10 | ? |
| 11 | } |
如許一來,每一個資料包中都包含一個模型和一個TransformHolder類型的文件,TransformHolder的Length若為1,則申明該模型在場景中只呈現了一次。若大于1,則可以按照記錄的transform信息輪回生成多個。本來有幾百個資料包,大小有十幾兆的場景,用該辦法后,變成了二十多個資料包,大小削減到不足2M,當然這實用于場景中的模型有重用的現象。
?
轉載于:https://www.cnblogs.com/sudiwangluo/p/5968558.html
總結
以上是生活随笔為你收集整理的3D网页游戏场景打包与加载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Intellij idea genera
- 下一篇: DICKSON隆重推荐的博客 --- S