Unity conserve le dossier StreamingAssets après avoir empaqueté WebGL, mais le chemin du fichier StreamingAssets ne peut pas être lu à l'aide de Application.streamingAssetsPath. Afin de lire correctement les données du fichier local StreamingAssets, nous devons utiliser la classe UnityWebRequest.
La classe System.Uri, cette classe peut nous aider à mieux construire l'uri, en particulier lors de l'utilisation de chemins locaux, combinée à Path.Combine peut mieux obtenir le chemin Uri. En raison de la différence de plate-forme, le chemin Uri est également différent : Plate-
forme Windows file:///D:/DATA/StreamingAssets/data.json
Plate-forme WebGl http://localhost/StreamingAssets/data.json Plate-forme
Android jar:file : ///data /app/xxx!/assets/data.json
Application de plateforme iOS/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data/Raw
使用Path.Combine径字符串
var uri = new System.Uri(Path.Combine(Application.streamingAssetsPath,
".xml"));
var filePath = new System.Uri(Path.Combine(Application.streamingAssetsPath, "Settings.xml")) ;
Demande UnityWebRequest = UnityWebRequest.Get(filePath);
rendement retour request.SendWebRequest();
if (request.result!=UnityWebRequest.Result.Success)
{ UnityEngine.Debug.LogError("Impossible de télécharger le fichier XML : " + request.error); rupture de rendement ; } else { byte[] responseData = request.downloadHandler.data ; responseData=RemoveBom(responseData);//移除 BOM string xmlData = Encoding.UTF8.GetString(responseData);
XmlDocument doc= nouveau XmlDocument();
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)
{ // La séquence d'octets de la nomenclature UTF-8 est 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;
}
Enregistrer le chemin après la modification xml doc.Save(uri.AbsolutePath)