unity StreamingAssets路径

原地址:http://blog.csdn.net/nateyang/article/details/8493791

我们在读写例如XML和TXT文件的时候,在电脑上和手机上路径不一致,造成了很多麻烦,其实有个简单的方法,在项目工程中新建一个StreamingAssets文件夹,把你的XML和TXT文件放到这里。

using UnityEngine;   
using System.Collections;   
using System.Xml;   
using System.Xml.Serialization;   
using System.IO;   
using System.Text;
using System;   
   
public class Reward    
 {   
   public int taskNo;  
     
   public Task[] task = new Task[15];  
   public Attribute attribute;   
   public Reward () {}   
   public struct Task  
   {   
      [XmlAttribute("taskReward")]   
      public string taskReward{ get; set;}   
      public Id id1;   
      public Id id2;  
      public Id id3;  
   }  
   public struct Id  
   {  
      [XmlAttribute("flag")]   
      public bool flag{ get; set;}   
      [XmlAttribute("name")]   
      public string name{ get; set;}  
      [XmlText()]  
      public string description{get;set;}  
          
   }    
}  
  
public class AchievementManager: MonoBehaviour {   
   Reward reward ;   
   FileInfo fileInfo;  
   string _data;   
      
   void Start ()   
   {     
      reward = new Reward();  
      LoadXML();  
   }   
   void LoadXML()   
   {   
      if(Application.platform == RuntimePlatform.IPhonePlayer)  
      {  
         fileInfo = new FileInfo(Application.dataPath + "/Raw/" + "Achievement.xml");   
          StreamReader r = fileInfo.OpenText();   
         _data = r.ReadToEnd();   
         r.Close();   
      }  
      else if(Application.platform == RuntimePlatform.Android)  
      {  
         fileInfo = new FileInfo(Application.streamingAssetsPath+"/Achievement.xml");  
         StartCoroutine("LoadWWW");  
      }  
      else  
      {  
         fileInfo = new FileInfo(Application.dataPath + "/StreamingAssets/"+ "Achievement.xml");   
         StreamReader r = fileInfo.OpenText();   
         _data = r.ReadToEnd();   
         r.Close();   
      }     
      if(_data.ToString() != "")   
      {   
         reward = (Reward)DeserializeObject(_data);                
      }   
   }  
   void OnGUI()  
   {  
       GUI.Label(new Rect(0,0,Screen.width,Screen.height),"data:"+_data);      
       if(Input.GetKey(KeyCode.Space))  
        {  
            Application.Quit();   
        }  
   }  
      
    IEnumerator LoadWWW()  
    {  
        WWW www = new WWW(Application.streamingAssetsPath+"/Achievement.xml");  
        yield return www;  
        _data =www.text;  
    }  
   public void Save()  
   {       
      _data = SerializeObject(reward);  
      StreamWriter writer;   
      fileInfo.Delete();      
      writer = fileInfo.CreateText();   
      writer.Write(_data);  
      writer.Close();   
   }  
   string UTF8ByteArrayToString(byte[] characters)   
   {        
      UTF8Encoding encoding = new UTF8Encoding();   
      string constructedString = encoding.GetString(characters);   
      return (constructedString);   
   }   
   
   byte[] StringToUTF8ByteArray(string pXmlString)   
   {   
      UTF8Encoding encoding = new UTF8Encoding();   
      byte[] byteArray = encoding.GetBytes(pXmlString);   
      return byteArray;   
   }   
   
   // Here we serialize our Reward object of reward   
   string SerializeObject(object pObject)   
   {  
      string XmlizedString = null;   
      MemoryStream memoryStream = new MemoryStream();   
      XmlSerializer xs = new XmlSerializer(typeof(Reward));   
      XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);   
      xs.Serialize(xmlTextWriter, pObject);   
      memoryStream = (MemoryStream)xmlTextWriter.BaseStream;   
      XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray());   
      return XmlizedString;   
   }   
   
   // Here we deserialize it back into its original form   
   object DeserializeObject(string pXmlizedString)   
   {   
      XmlSerializer xs = new XmlSerializer(typeof(Reward));   
      MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(pXmlizedString));   
      XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);   
      return xs.Deserialize(memoryStream);   
   }   
} 

注:其实每个平台的路径都可以是Application.streamingAssetsPath+"/Achievement.xml"。但是android平台必须要用WWW加载,其他的平台貌似也可以的,自己试试哈,呵呵~~~

原文地址:https://www.cnblogs.com/123ing/p/3704048.html