解决 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 工程模板了。。。。
Unity\Editor\Data\PlaybackEngines\androidplayer\
就像 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+"\n"; 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 https://files.cnblogs.com/solq/android_read_Resources.zip