zoukankan      html  css  js  c++  java
  • unity 初始化数据存储问题

    在用unity进行开发的时初始化的数据和中间实时生成的数据存储不同,初始化文件数据建议安放在asset-StreamingAssets文件下,需要时读取取来。运行时所需的实时文件或数据持久化的xml文件则放在Application.persistentDataPath中。就项目开发中出现的问题以及解决方法做以下说明。

    1)android应用开发时,从打包文件中读取数据并存储到Application.persistentDataPath中。

       IEnumerator CopyXmlConfig()
        {
            //string strDestDir =Path.Combine(TransitData.appPersitPath, "iniXmlFile");
            string strDestDir = TransitData.appPersitPath;
            if (!Directory.Exists(strDestDir))
            {
                Directory.CreateDirectory(strDestDir);
            }
    
            yield return StartCoroutine(CopyAssetFileToPersistentPath("MenuData.xml", strDestDir));
            yield return StartCoroutine(CopyAssetFileToPersistentPath("OrderMenuData.xml", strDestDir));
        }
        IEnumerator CopyAssetFileToPersistentPath(string assetFile,string destFile)
        {
            string src = (new System.Uri(Path.Combine(Application.streamingAssetsPath ,assetFile))).AbsoluteUri;
            //string src = "file:///" + Application.dataPath + "/" + assetFile;
    
            using (WWW www = new WWW(src))
            {
                yield return www;
    
                if (!string.IsNullOrEmpty(www.error))
                {
                    yield break;
                }
    
                string dest =Path.Combine(destFile, assetFile);
    
                using (BinaryWriter sw = new BinaryWriter(File.Open(dest, FileMode.Create, FileAccess.ReadWrite)))
                {               
                    sw.Write(www.bytes);
                    sw.Flush();
                    sw.Close();
                }
            }
        }
        private void Awake()
        {
            StartCoroutine(CopyXmlConfig());
        }

    2)此问题是关于Application.persistentDataPath路径问题

    这是一个坑,由于涉及到android平台是否内置内存卡等问题,调用相关路径时并不能如愿,此问题在一些山寨pad中尤为明显。在pc端可以放心使用此路径,在android端可采用如下路径

        public static string appPersitPath
        {
            get
            {
            #if UNITY_EDITOR_WIN
    
                return @"C:UsersDDAppDataLocalLow1111_unity";// Application.persistentDataPath;
    
            #endif
    
            #if UNITY_ANDROID
    
                using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
                {
                    using (AndroidJavaObject currentActivity = jc.GetStatic<AndroidJavaObject>("currentActivity"))
                    {
                        path = currentActivity.Call<AndroidJavaObject>("getFilesDir").Call<string>("getCanonicalPath");
                    }
                }
                return path;
    
            #endif
            }
        }

    ps:对于unity预处理命令可以参考https://docs.unity3d.com/Manual/PlatformDependentCompilation.html中的介绍

  • 相关阅读:
    C# 中使用反射的优缺点
    winfrom---Window 消息大全
    Entity Framework:三种开发模式实现数据访问
    asp.net Core 2.0 MVC为Controller或Action添加定制特性实现登录验证
    [十二省联考2019] 异或粽子 解题报告 (可持久化Trie+堆)
    [jzoj 3175] 数树数 解题报告 (树链剖分)
    [jzoj 5661] 药香沁鼻 解题报告 (DP+dfs序)
    [jzoj 5662] 尺树寸泓 解题报告 (线段树+中序遍历)
    [jzoj 5664] [GDOI2018Day1模拟4.6] 凫趋雀跃 解题报告(容斥原理)
    范德蒙恒等式学习笔记
  • 原文地址:https://www.cnblogs.com/llstart-new0201/p/7263474.html
Copyright © 2011-2022 走看看