Unity(六) 使用XML/JSON/Binary数据文件封装场景以及StreamingAssets目录的安卓平台同步

PS:首先感谢给我带来帮助信息的各位博主。尊重原创收藏以温故。文末附上原参考链接以及示例工程


一:了解Unity资源加载的方式

1:Resources文件夹

     只读,不能动态修改,打包发布时包含目录下所有内容。资源加载方式如Resources.Load(预制名)等

    需要进行写操作的文件不要存放到这里,如存储游戏数据


2:StreamingAssets文件夹

   虚拟目录,PC平台读取正常,打包发布后时会被压缩加密,只能进行WWW读取。主要存放二进制文件和如视频文件等

   PC读取路径:filepath = "file://"+ Application.streamingAssetsPath+“/my.xml”

  例:

IEnumerator LoadXML()
    {
        string sPath= "file://"+Application.streamingAssetsPath + "/my.xml";
        WWW www = new WWW(sPath);
        yield return www;
        _result = www.text;//XML表数据


          XmlDocument xmlDoc = new XmlDocument();       
       xmlDoc.LoadXml(www.text);
       XmlNodeList nodeList = xmlDoc.SelectSingleNode("gameObjects").ChildNodes;
       foreach (XmlElement scene in nodeList) 
          {
           }
    }


Android读取路径:filepath ="jar:file://"+Application.dataPath+ "!/assets"+"/my.xml";

 方法同上


3:AssetBundle (可参考上一篇文章)

    Unity定义的一种二进制文件,包体较小。如打包预制、场景等,读取方式WWW

   关于移动端脚本更新的问题已不是问题,本地工程包含脚本即可。

   打包发布后大版本如1.0主要更新脚本内容,小版本如1.0.1主要更新资源如场景模型等,都是通过服务器对比版本下载更新。若大版本已发布则优先用户强制更新大版本


4:永久/临时路径PersistentDataPath

      内容可读写,不过是运行时才可写入或读取,所以提前存入数据是不可行的。例如本人参考示例工程打包场景数据写入XML然后存入永久路径,这些都是在编辑模式下进行的。

     正在准备实现将玩家数据等重要信息封装到XML中保存到该永久路径

例:

XmlDocument xmlDoc = new XmlDocument();

...

xmlDoc.Save(Application.persistentDataPath+"//abc.xml");

读:

XmlDocument xmlDoc = new XmlDocument();

xmlDoc.Load(Application.persistentDataPath+"//abc.xml");



二:将场景信息封装到XML/JSON/Binary数据文件中,以实现动态加载

      原参考工程链接已分享在下面,主要实现的是PC端

      本文修改后的工程也分享在下面,PC端和移动端都可运行(心得体会记录在readme.text中)


三:在不同平台下的资源路径同步和总结

        if(Application.platform==RuntimePlatform.Android)
            localPath = Application.streamingAssetsPath+"/score.xml"; //在Android中实例化WWW不能在路径前面加"file://"				
        else
	   localPath = "file://"+UnityEngine.Application.streamingAssetsPath + "/score.xml";//在Windows中实例化WWW必须要在路径前面加"file://"
				
		
                    WWW www = new WWW(localPath);
			while (!www.isDone)
			{
				
				yield return www;
				
                         XmlDocument xmlDoc = new XmlDocument();
			xmlDoc.LoadXml(www.text);  //也可以使用Load(localPath)只适用PC平台
			XmlNodeList nodeList=xmlDoc.SelectSingleNode("rank").ChildNodes;
			
			foreach(XmlElement xe in nodeList)
			{
} }

IOS和PC平台读取方法一致    string filepath = Application.dataPath +"/StreamingAssets"+"/json.txt";




本文工程:https://pan.baidu.com/s/1i4LsgSH

原参考工程:https://pan.baidu.com/s/1gfzrNEj




参考链接:

1:[雨松MOMO] Unity3D研究院之将场景导出XML或JSON或二进制并且解析还原场景(四十二)       

http://www.manew.com/thread-21417-1-1.html

2:[雨松MOMO] Unity3D之Android同步方法读取streamingAssets(八十八)

http://www.manew.com/thread-89202-1-1.html         

3:Unity3D移动平台动态读取外部文件全解析  http://www.cnblogs.com/murongxiaopifu/p/4199541.html

4: unity Android 打包后读取 xml 文件   https://www.tuicool.com/articles/BZrQzi

5:unity 在移动平台中,文件操作路径详解  http://www.cnblogs.com/wonderKK/p/3969284.html

9:Unity3d新网络请求方式UnityWebRequest详解  http://gad.qq.com/article/detail/34139%20target=


如有疑问之处,欢迎指正和探讨。



你可能感兴趣的:(Unity开发)