O Unity mantém a pasta StreamingAssets após o empacotamento do WebGL, mas o caminho do arquivo StreamingAssets não pode ser lido usando Application.streamingAssetsPath. Para ler corretamente os dados do arquivo StreamingAssets local, precisamos usar a classe UnityWebRequest.
A classe System.Uri, essa classe pode nos ajudar a construir melhor a uri, principalmente quando usando o caminho local, combinado com Path.Combine pode pegar melhor o caminho da Uri. Devido à diferença na plataforma, o caminho do Uri também é diferente:
Windows platform file:///D:/DATA/StreamingAssets/data.json
WebGl platform http://localhost/StreamingAssets/data.json
Android platform jar:file: ///data /app/xxx!/assets/data.json
Aplicativo da plataforma iOS/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data/Raw
使用Path.Combine
(Application.streamingAssetsPath,
“.xml”));
var filePath = new System.Uri(Path.Combine(Application.streamingAssetsPath, “Settings.xml”));
Solicitação UnityWebRequest = UnityWebRequest.Get(filePath);
yield return request.SendWebRequest();
if (request.result!=UnityWebRequest.Result.Success)
{ UnityEngine.Debug.LogError("Falha ao baixar arquivo XML: " + request.error); quebra de rendimento; } else { byte[] responseData = request.downloadHandler.data; responseData=RemoveBom(responseData);//移除BOM string xmlData = Encoding.UTF8.GetString(responseData);
XmlDocumento doc= new XmlDocumento();
doc.LoadXml(xmlData);
XmlNodeList nodeList = doc.GetElementsByTagName(“noci”);
foreach (XmlNode node in nodeList)
{
if ("ReceivePLC" == node.Attributes["key"].Value)
{
receiveIp = node.Attributes["receiveIp"].Value;
receivePort = int.Parse(node.Attributes["receivePort"].Value);
}
}
private byte[] RemoveBom(byte[] data)
{ // A sequência de bytes UTF-8 BOM é EF BB BF byte[] bom = new byte[] { 0xEF, 0xBB, 0xBF };
if (data.Length >= bom.Length && data[0] == bom[0] && data[1] == bom[1] && data[2] == bom[2])
{
byte[] result = new byte[data.Length - bom.Length];
Array.Copy(data, bom.Length, result, 0, result.Length);
return result;
}
return data;
}
Salvar caminho após modificação do xml doc.Save(uri.AbsolutePath)