今天要做一個移動平臺的版本控制,先做一個前期的工作,就是從服務(wù)器端加載資源,然后讀取到本地,再從本地讀取資源。這里就以pc平臺為例,移動平臺也是一樣,就是稍微做一點路徑上的修改, 下面是不同平臺路徑的預(yù)編譯:
//不同平臺下StreamingAssets的路徑是不同的,這里需要注意一下。 public static readonly string PathURL = #if UNITY_ANDROID //安卓 "jar:file://" + Application.dataPath + "!/assets/"; #elif UNITY_IPHONE //iPhone Application.dataPath + "/Raw/"; #elif UNITY_STANDALONE_WIN || UNITY_EDITOR //windows平臺和web平臺 "file://" + Application.dataPath + "/StreamingAssets/"; #else string.Empty; #endif 關(guān)于資源的打包不理解的,我在之前的博文中有介紹:http://blog.csdn.net/dingxiaowei2013/article/details/17439887,可以去看一下這篇文章。
操作步驟:創(chuàng)建腳本,命名Text.cs,并且將其拖放到MainCamera中
using UnityEngine; using System.Collections; using System.IO; using System.Collections.Generic; using System; public class Text : MonoBehaviour { //文本中每行的內(nèi)容 ArrayList infoall; //皮膚資源,這里用于顯示中文 public GUISkin skin; void Start () { print("當(dāng)前文件路徑:"+Application.persistentDataPath); //刪除文件 DeleteFile(Application.persistentDataPath,"FileName.txt"); //創(chuàng)建文件,共寫入3次數(shù)據(jù) CreateFile(Application.persistentDataPath,"FileName.txt","dingxiaowei"); CreateFile(Application.persistentDataPath,"FileName.txt","丁小未"); //CreateFile(Application.persistentDataPath ,"Filename.assetbundle","丁小未"); //下載模型 StartCoroutine(loadasset("http://192.168.1.180/3DShowResource/Products/AssetBundles/HX_DY02.assetbundle")); //得到文本中每一行的內(nèi)容 infoall = LoadFile(Application.persistentDataPath,"FileName.txt"); } //寫入模型到本地 IEnumerator loadasset(string url) { WWW w = new WWW(url); yield return w; if (w.isDone) { byte[] model = w.bytes; int length = model.Length; //寫入模型到本地 CreateModelFile(Application.persistentDataPath, "Model.assetbundle", model,length); } } void CreateModelFile(string path, string name, byte[] info, int length) { //文件流信息 //StreamWriter sw; Stream sw; FileInfo t = new FileInfo(path + "http://" + name); if (!t.Exists) { //如果此文件不存在則創(chuàng)建 sw = t.Create(); } else { //如果此文件存在則打開 //sw = t.Append(); return; } //以行的形式寫入信息 //sw.WriteLine(info); sw.Write(info, 0, length); //關(guān)閉流 sw.Close(); //銷毀流 sw.Dispose(); } /** * path:文件創(chuàng)建目錄 * name:文件的名稱 * info:寫入的內(nèi)容 */ void CreateFile(string path,string name,string info) { //文件流信息 StreamWriter sw; FileInfo t = new FileInfo(path+"http://"+ name); if(!t.Exists) { //如果此文件不存在則創(chuàng)建 sw = t.CreateText(); } else { //如果此文件存在則打開 sw = t.AppendText(); } //以行的形式寫入信息 sw.WriteLine(info); //關(guān)閉流 sw.Close(); //銷毀流 sw.Dispose(); } /** * 讀取文本文件 * path:讀取文件的路徑 * name:讀取文件的名稱 */ ArrayList LoadFile(string path,string name) { //使用流的形式讀取 StreamReader sr =null; try{ sr = File.OpenText(path+"http://"+ name); }catch(Exception e) { //路徑與名稱未找到文件則直接返回空 return null; } string line; ArrayList arrlist = new ArrayList(); while ((line = sr.ReadLine()) != null) { //一行一行的讀取 //將每一行的內(nèi)容存入數(shù)組鏈表容器中 arrlist.Add(line); } //關(guān)閉流 sr.Close(); //銷毀流 sr.Dispose(); //將數(shù)組鏈表容器返回 return arrlist; } //讀取模型文件 IEnumerator LoadModelFromLocal(string path, string name) { string s = null; #if UNITY_ANDROID s = "jar:file://"+path+"/"+name; #elif UNITY_IPHONE s = path+"/"+name; #elif UNITY_STANDALONE_WIN || UNITY_EDITOR s = "file://"+path+"/"+name; #endif WWW w = new WWW(s); yield return w; if (w.isDone) { Instantiate(w.assetBundle.mainAsset); } } /** * path:刪除文件的路徑 * name:刪除文件的名稱 */ void DeleteFile(string path,string name) { File.Delete(path+"http://"+ name); } void OnGUI() { //用新的皮膚資源,顯示中文 GUI.skin = skin; //讀取文件中的所有內(nèi)容 foreach(string str in infoall) { //繪制在屏幕當(dāng)中 GUILayout.Label(str); } if (GUILayout.Button("加載模型")) { StartCoroutine(LoadModelFromLocal(Application.persistentDataPath, "Model.assetbundle")); } } }
運行后的效果:這里演示了讀取操作文本和打包文件,如果切換到移動平臺可能中文字體無法顯示,就需要做個字體即可,后面繼續(xù)版本控制后續(xù)工作。 |
|
來自: Steven書房 > 《U3D基礎(chǔ)》