【Unity3d】3d網(wǎng)頁(yè)游戲場(chǎng)景打包與加載
http://www.mysjtu.com/page/M0/S716/716482.html
3d游戲中 一個(gè)場(chǎng)景往往斗勁大 若是游戲的進(jìn)行須要下載一個(gè)10M甚至更大的場(chǎng)景時(shí) 加載所用的時(shí)候會(huì)導(dǎo)致很大項(xiàng)目組玩家的流失
我們知道unity3d中的內(nèi)置地形是應(yīng)用一張高度圖 對(duì)其地形進(jìn)行打包今后 發(fā)明<=100KB
那么若是采取unity3d的內(nèi)置地形作為游戲中的地形時(shí) 起首加載地形并顯示 再去加載場(chǎng)景中的部件(比如樹、房子等) 將會(huì)很有須要
在加載場(chǎng)景中的部件時(shí) 可以按照玩家當(dāng)前地點(diǎn)的地位 由近到遠(yuǎn)的去加載
場(chǎng)景中的每個(gè)部件實(shí)際上并不都是獨(dú)一無(wú)二的
比如一棵一模一樣的樹 可能同一個(gè)場(chǎng)景中呈如今很多處所 不合的只是樹的地位信息
那么在加載場(chǎng)景的時(shí)辰則只須要加載一個(gè)樹的模型 并記錄下N個(gè)樹的transform信息 將會(huì)大大的削減場(chǎng)景所占的空間
若是模型的重用率較高 那么這個(gè)題目的解決將會(huì)成倍的削減一個(gè)場(chǎng)景所占的空間
場(chǎng)景在加載時(shí) 也只須要下載一個(gè)樹的模型 并按照transform信息 在指定的地位復(fù)制出N棵樹即可
在應(yīng)用unity3d的BuildPipeline進(jìn)行打包之前 須要遍歷一邊所選文件夾下的場(chǎng)景文件
若是文件的MeshFilter的Mesh為在該文件夾中只呈現(xiàn)了一次 則申明該模型在場(chǎng)景中沒有反復(fù) 則記錄下該模型文件的transform信息 并打包
若是該Mesh呈現(xiàn)的次數(shù)大于一次 則記錄下這些和該Mesh雷同的模型的transform信息 打包時(shí)包含一個(gè)模型和多個(gè)transform信息
在unity3d中有個(gè)名為ScriptableObject的類 可以哄騙它來存儲(chǔ)本身所需的各類百般的資料
public class TransformHolder : ScriptableObject
{
public int Length;
public Vector3[] position;
public Quaternion[] eulerAngles;
public Vector3[] localScale;
}
如許一來 每一個(gè)資料包中都包含一個(gè)模型和一個(gè)TransformHolder類型的文件
TransformHolder的Length若為1 則申明該模型在場(chǎng)景中只呈現(xiàn)了一次
若大于1 則可以按照記錄的transform信息輪回生成多個(gè)
本來有幾百個(gè)資料包 大小有十幾兆的場(chǎng)景
用該辦法后 變成了二十多個(gè)資料包 大小削減到不足2M
當(dāng)然這實(shí)用于場(chǎng)景中的模型有重用的現(xiàn)象
posted on 2013-02-22 22:29 麒麟子 閱讀(1209) 評(píng)論(0) 編輯 收藏 引用