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

来源:互联网 发布:用友软件t3标准版 编辑:程序博客网 时间:2024/05/16 11:23

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=


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



阅读全文
0 0
原创粉丝点击