zoukankan      html  css  js  c++  java
  • 解决 unity 生成 android apk read Resources

    http://www.cnblogs.com/solq/archive/2012/05/21/2511522.html



    TextAsset t = (TextAsset)Resources.Load("skill2");
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.LoadXml(t.text.ToString().Trim());
             
    
            XmlElement n = (XmlElement)xmlDoc.SelectSingleNode("/datas/data[@skillID='1002']");  
            if (n != null)
            {
                print("+++++++++++++++++++++++++++++++++++++++++++++++++");
                data += n.GetAttribute("skillID");
            }


    解决 unity 生成 android apk read Resources 

    试了很多方法都找不到 unity 的目录,,最后没有办法了,放在 Resources 目录里。。。

    发觉只能读不能写,,汗,,,白费了,又重新找。。。。

    续:

    http://forum.unity3d.com/threads/97043-Sqlite-for-Android-help-please/page2

    http://forum.unity3d.com/threads/114660-Unity-3D-Android-SQLite-Examples

    http://unity3d.com/support/documentation/Manual/StreamingAssets.html

     

    找到了 android 工程模板了。。。。

    UnityEditorDataPlaybackEnginesandroidplayer

    就像 web 模板一样

    把它复制出来,导入eclipse

    好了,只能拼 android 基础了。。。。

    做好放在 

    资料:http://www.xuanyusong.com/archives/676

    http://game.ceeger.com/Manual/Plugins.html

     

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    解决了,,,下面说下步骤

    test.txt 路径如图

    void readFile(string file)
        {
            path = "jar:file://" + Application.dataPath + "!/assets/" + file;
    
            if (File.Exists(path))
            {
                stringToEdit = "yes";
            }
            else
            {
                stringToEdit = "no";
    
                WWW www = new WWW(path);
                while (!www.isDone) { }
    
                stringToEdit += " " + www.text;
    
            }
        }


    不知道为什么 File.Exists(path)会检测不到文件,,,不过能读取就可以了

    说下

    Application.persistentDataPath 是指向 android /data/data/xxx.xxx.xxx/files/
    Application.dataPath 是指向 /data/app/xxx.xxx.xxx.apk

    汗:http://game.ceeger.com/Manual/StreamingAssets.html 这是unity圣典翻译好了,写得很详细了,,,
    难怪会检测不到文件..现在还在解决解包问题
    然后复制到 Application.persistentDataPath



    /////////////////////////////////////最终方式/////////////////////////////////////////

    using UnityEngine;
    using System.Collections;
    using System.IO;
    using ICSharpCode.SharpZipLib.Zip;
    using ICSharpCode.SharpZipLib.Core;
    using System;
    public class Test : MonoBehaviour 
    {
        string path = "";
        string zip_file = "d:\t.zip";
        void Start()
        {
            path = "jar:file://" + Application.dataPath + "!/assets/";
            //readFile("test.txt");
    
           // File.WriteAllText(Application.persistentDataPath + "/xx2.txt", "xxxxxxxxxxxxxxxxxxxx");
          
           UnZipFile(Application.dataPath, "assets");
           
        }
    
        #region 解压资料处理fn
        
        //判断是否已经解压
        bool checkDecompressingFiles(string flag_file)
        {
            if (!File.Exists(Application.persistentDataPath + "/" + flag_file))
            {
                File.WriteAllText(Application.persistentDataPath + "/" + flag_file, "a");
                return false;
            }
            return true;
        }
    
    /*
     * 没有测试过
    ICSharpCode.SharpZipLib.Zip.FastZip zip = new ICSharpCode.SharpZipLib.Zip.FastZip();
    zip.CreateZip("C:\foo.zip", "C:\待压缩的文件夹", true, ""); //第三个参数表示是否压缩子文件夹
    zip.ExtractZip("C:\foo.zip", "C:\压缩后存放的文件夹", "");
    如果我们只想压缩目录中的一个或部分文件,或者我们只想解压文件中的一个或部分文件,怎么办呢?那就得把最后一个参数用上,它是字符串类型的正则表达式,比如只压缩 ini 文件用:"^.*(.ini)$"。
    */
    
        //用第三方工具去读取 zip 
        void UnZipFile(string zipFilePath,string dir)
        {
            if (checkDecompressingFiles("init.txt")) {
                stringToEdit += " 已经解压过了";
                return;
            }else
                stringToEdit += " 第一次解压";
            using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath)))
            {          
                ZipEntry theEntry;
                while ((theEntry = s.GetNextEntry()) != null)
                {
                    string directoryName = Path.GetDirectoryName(theEntry.Name);
                    string fileName = Path.GetFileName(theEntry.Name);
                   // print("directoryName:" + directoryName);
                   // print("fileName:" + fileName);
    
                    if (directoryName.Length > 0 && directoryName.Contains(dir))
                    {
                        //stringToEdit += " directoryName:" + directoryName+"
    "; 
                        Directory.CreateDirectory(Application.persistentDataPath + "/" + directoryName);
                        if (fileName != string.Empty)
                        {
                            using (FileStream streamWriter = File.Create(Application.persistentDataPath + "/" + theEntry.Name))
                            {
    
                                int size = 2048;
                                byte[] data = new byte[2048];
                                while (true)
                                {
                                    size = s.Read(data, 0, data.Length);
                                    if (size > 0)                                
                                        streamWriter.Write(data, 0, size);                                
                                    else                                
                                        break;                                
                                }
                            }
                        }
                    }
                    
    
                   
                }
            }
        }
    
        //没有测试过下面
        void CreateZipFile(string filesPath, string zipFilePath)
        {
    
            if (!Directory.Exists(filesPath))
            {
                
                return;
            }
    
            try
            {
                string[] filenames = Directory.GetFiles(filesPath);
                using (ZipOutputStream s = new ZipOutputStream(File.Create(zipFilePath)))
                {
    
                    s.SetLevel(9); // 压缩级别 0-9
                    //s.Password = "123"; //Zip压缩文件密码
                    byte[] buffer = new byte[4096]; //缓冲区大小
                    foreach (string file in filenames)
                    {
                        ZipEntry entry = new ZipEntry(Path.GetFileName(file));
                        //entry.DateTime = DateTime.Now;
                        s.PutNextEntry(entry);
                        using (FileStream fs = File.OpenRead(file))
                        {
                            int sourceBytes;
                            do
                            {
                                sourceBytes = fs.Read(buffer, 0, buffer.Length);
                                s.Write(buffer, 0, sourceBytes);
                            } while (sourceBytes > 0);
                        }
                    }
                    s.Finish();
                    s.Close();
                }
            }
            catch (Exception ex)
            {
               
            }
        }
    
        //直接用 unty www 去读取 jar 跟 zip 标准差不多吧
        void readFile(string file)
        {
            path+= file;
    
            if (File.Exists(path))
            {
                stringToEdit = "yes";
            }
            else
            {
                stringToEdit = "no";
    
                WWW www = new WWW(path);
                while (!www.isDone) { }
    
                stringToEdit += " " + www.text;
    
    
                stringToEdit+=" ReadAllText:"+File.ReadAllText(path);
            }
        }
        #endregion
    
        //请输入一个字符串
        private string stringToEdit = "";
    
        void Update () 
        {
            //点击手机返回键关闭应用程序
            if (Input.GetKeyDown(KeyCode.Escape) || Input.GetKeyDown(KeyCode.Home) )
              {
                   Application.Quit();
              }
        }
        
        void OnGUI()
        {
    
            GUILayout.TextField("persistentDataPath:" + Application.persistentDataPath);
            GUILayout.TextField("dataPath:" + Application.dataPath);
            GUILayout.TextField("temporaryCachePath:" + Application.temporaryCachePath);
    
            stringToEdit = GUILayout.TextArea (stringToEdit, GUILayout.Width(300),GUILayout.Height(250));         
        }   
        
    }
    //用到解压的库。。。http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx 
    //感谢:雨松MOMO http://www.xuanyusong.com/
    //示例demo http://files.cnblogs.com/solq/android_read_Resources.zip


  • 相关阅读:
    ASP.NET Core 从入门到精通-资源收集导航
    【5分钟系列】计算机系统结构的定义
    C#反射与特性(九):全网最全-解析反射
    C#反射与特性(七):自定义特性以及应用
    C#反射与特性(六):设计一个仿ASP.NETCore依赖注入Web
    C#反射与特性(五):类型成员操作
    C#反射与特性(四):实例化类型
    C#反射与特性(三):反射类型的成员
    C#反射与特性(二):探究反射
    安卓TabLayout+ViewPager实现切页
  • 原文地址:https://www.cnblogs.com/nafio/p/9137509.html
Copyright © 2011-2022 走看看