目录
一、目的
1、想知道:Unity中安卓、PC端配置文件:只有读,没有写
二、参考
1、Unity安卓配置文件:读和写
三、注意:
1、每次修改Resource内部的配置文件就可以。
1、发现使用www和协程读取配置文件,会导致配置文件没有读取完毕,就开始了运行其他程序,然后报错,所以下面是不用www和协程读取配置文件。
四、操作:一:完成:
1、注意:
1、文件夹设置
1、xml内容
1、运行效果:PC、手机正常运行 读取成功,并且每次都会为了保持配置文件在persistentDataPath中创建最新的配置文件,保持和Resource内容一致,
1、总体代码:
一、目的
1、想知道:Unity中安卓、PC端配置文件:只有读,没有写
二、参考
1、Unity安卓配置文件:读和写
- 总结:good:读写功能都有。
三、注意:
1、每次修改Resource内部的配置文件就可以。
1、发现使用www和协程读取配置文件,会导致配置文件没有读取完毕,就开始了运行其他程序,然后报错,所以下面是不用www和协程读取配置文件。
四、操作:一:完成:
1、注意:
①不能使用www或者协程的方法,因为那样会导致配置文件没有读取完毕就开始运行其他程序了,所以这个方法目前读取最好
①为了保持配置文件在persistentDataPath中最新的,所以需要删除之前persistentDataPath的配置文件,重新创建配置文件
①目前我的代码中没有修改配置文件的方法,可以参考我写的其他安卓配置文件读写方法,方法一样的
1、文件夹设置
1、xml内容
<config>
<butterfly>
<flySpeed>50</flySpeed>
<allowDistanceMin>6</allowDistanceMin>
<distanceMinNeedMoveAwayUI>20</distanceMinNeedMoveAwayUI>
<time_allowAtUIMax> 2</time_allowAtUIMax>
<time_howLongDestroy>0.1</time_howLongDestroy>
<time_interval_createButterfly>4</time_interval_createButterfly>
<totalNum_butterfly>4</totalNum_butterfly>
</butterfly>
<mouseClick>
<time_hideMouseClick>2</time_hideMouseClick>
<time_changeMouseClick>0.2</time_changeMouseClick>
</mouseClick>
<addScoreEffects>
<time_duration_addScoreMove>2</time_duration_addScoreMove>
</addScoreEffects>
</config>
<!--
butterfly:蝴蝶有关的
flySpeed:蝴蝶飞行的速度
allowDistanceMin:蝴蝶允许的与目标点最小距离,小于这个距离说明蝴蝶到达目标点了
distanceMinNeedMoveAwayUI:需要离开目标点的最小距离,当小于这个距离时候,代表手指动了或者摄像头移动了,蝴蝶就要飞走了
time_allowAtUIMax:蝴蝶允许在UI中的最长时间,超过这个时间蝴蝶就要飞走,单位:秒
time_howLongDestroy:蝴蝶被点击后多久才消失,单位:秒
time_interval_createButterfly:蝴蝶诞生的间隔,单位:秒
totalNum_butterfly:蝴蝶在场景中同时出现的总数量
mouseClick:鼠标点击后出现特效有关的
time_hideMouseClick:鼠标点击位置出现的特效多久后消失,单位:秒
time_changeMouseClick:鼠标点击位置出现的特效图片切换的时间,让其出现动态效果,单位:秒
addScoreEffects:加分特效有关的
time_duration_addScoreMove:加分特效移动的持续时间,单位:秒
-->
1、运行效果:PC、手机正常运行 读取成功,并且每次都会为了保持配置文件在persistentDataPath中创建最新的配置文件,保持和Resource内容一致,
1、总体代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System.Xml;
/// <summary>
/// 功能:读取所有配置文件
/// </summary>
public class My_test10_config : MonoBehaviour
{
#region["蝴蝶的配置文件"]
/// <summary>蝴蝶飞行的速度</summary>
[HideInInspector]
public float flySpeed = -1;
/// <summary>蝴蝶允许的与目标点最小距离,小于这个距离说明蝴蝶靠近目标点了</summary>
[HideInInspector]
public float allowDistanceMin = -1;
/// <summary>蝴蝶允许的与目标点最小距离,小于这个距离说明蝴蝶靠近目标点了</summary>
[HideInInspector]
public float distanceMinNeedMoveAwayUI = -1;
/// <summary>蝴蝶允许在UI中的最长时间,超过这个时间蝴蝶就要飞走,单位:秒</summary>
[HideInInspector]
public float time_allowAtUIMax = -1;
/// <summary>蝴蝶被点击后多久才消失,单位:秒</summary>
[HideInInspector]
public float time_howLongDestroy = -1;
/// <summary>float类型:蝴蝶诞生的间隔</summary>
[HideInInspector]
public float time_interval_createButterfly = -1;
/// <summary>int类型:蝴蝶在场景中同时出现的总数量</summary>
[HideInInspector]
public int totalNum_butterfly = -1;
#endregion
#region["鼠标点击后出现特效有关的"]
/// <summary>鼠标点击位置出现的特效多久后消失</summary>
[HideInInspector]
public float time_hideMouseClick = -1;
/// <summary>鼠标点击位置出现的特效图片切换的时间,让其出现动态效果</summary>
[HideInInspector]
public float time_changeMouseClick = -1;
#endregion
#region["加分特效有关的"]
/// <summary>加分特效移动的持续时间</summary>
[HideInInspector]
public float time_duration_addScoreMove = -1;
#endregion
/// <summary>配置文件的名字</summary>
private string str_configName = "config.xml";
string path;
private void Awake()
{
// GetPath02();
//测试:不使用www来加载配置文件
path = Application.persistentDataPath + "/config.xml";
SetFileToPersistent();
LoadXml();
}
/// <summary>
/// 功能:将Resources中的配置文件加载到persistentDataPath中
/// </summary>
void SetFileToPersistent()
{
//StreamWriter一定要记得关闭.不关闭人家不鸟你之前做什么,
FileInfo info = new FileInfo(path);
if (info.Exists)
{
//为了保持配置文件在persistentDataPath中最新的,所以需要删除之前的,重新创建配置文件
File.Delete(path);
//TextAsset ts = Resources.Load("TestXml/testXml") as TextAsset;
TextAsset ts = Resources.Load("test10/config/config") as TextAsset;
string content = ts.text;
StreamWriter sw = info.CreateText();
sw.Write(content);
sw.Close();
sw.Dispose();
}
else if (!info.Exists)
{
//TextAsset ts = Resources.Load("TestXml/testXml") as TextAsset;
TextAsset ts = Resources.Load("test10/config/config") as TextAsset;
string content = ts.text;
StreamWriter sw = info.CreateText();
sw.Write(content);
sw.Close();
sw.Dispose();
//result.text = "添加Xml文件陈宫";
}
// else result.text = "已存在Xml文件";
}
/ <summary>
/ 功能:通过不同的平台,找到配置文件位置
/ 准备修改GetPath的缺点
/ 缺点:
/ 网页:
/ </summary>
//public void GetPath02()
//{
// string localPath;
// if (Application.platform == RuntimePlatform.Android)
// {
// localPath = "jar:file://" + Application.dataPath + "!/assets" + "/test10/" + str_configName; //在Android中实例化WWW不能在路径前面加"file://"
// Debug.Log(localPath);
// }
// else
// {
// localPath = "file://" + UnityEngine.Application.streamingAssetsPath + "/" + "test10/" + str_configName;//在Windows中实例化WWW必须要在路径前面加"file://"
// Debug.Log(localPath);
// }
// //CopyFiles02(localPath);
// CopyFiles03(localPath);
//}
/ <summary>
/ 安卓写xml:
/ 网页:
/ 缺点:不是每次都创建新的配置文件在设备的缓存地方
/ </summary>
//private void CopyFiles02(string path)
//{
// WWW www = new WWW(path);
// //print("www.bytes"+www.bytes);
// // yield return www;
// if (www.isDone)
// {
// string newPath = Application.persistentDataPath + "/" + str_configName;
// // string newPath = Application.persistentDataPath + "/" +"test10/"+ str_configName;
// if (File.Exists(newPath))
// {
// //如果缓存的地方有配置文件就将其删除,换成最新的
// //print("如果缓存的地方有配置文件就将其删除,换成最新的,这样所有的只需要设置一个配置文件就可以了");
// File.Delete(newPath);
// File.WriteAllBytes(newPath, www.bytes);
// }
// else if (!File.Exists(newPath))
// {
// print("缓存的地方没有配置文件");
// File.WriteAllBytes(newPath, www.bytes);
// }
// }
// LoadXml();
//}
/ <summary>
/功能: 安卓写xml:
/ 解决:不是每次都创建新的配置文件在设备的缓存地方
/
/ </summary>
//private void CopyFiles03(string path)
//{
// WWW www = new WWW(path);
// //print("www.bytes"+www.bytes);
// // yield return www;
// if (www.isDone)
// {
// string newPath = Application.persistentDataPath + "/" + str_configName;
// // string newPath = Application.persistentDataPath + "/" +"test10/"+ str_configName;
// if (File.Exists(newPath))
// {
// //如果缓存的地方有配置文件就将其删除,换成最新的
// //print("如果缓存的地方有配置文件就将其删除,换成最新的,这样所有的只需要设置一个配置文件就可以了");
// File.Delete(newPath);
// //TODO:因为执行的太快了,所以没有创建新的配置文件
// File.WriteAllBytes(newPath, www.bytes);
// //LoadXml();
// }
// else if (!File.Exists(newPath))
// {
// print("缓存的地方没有配置文件");
// MyDebug.Add("缓存的地方没有配置文件","");
// File.WriteAllBytes(newPath, www.bytes);
// }
// }
// LoadXml();
//}
/// <summary>
/// 安卓读xml:
/// 网页:
/// </summary>
public void LoadXml()
{
string path = Application.persistentDataPath + "/" + str_configName;
string strs = File.ReadAllText(path);
//Debug.Log(strs);
//MyDebug.Add(strs, "");
if (!File.Exists(path))
{
print("配置文件路径错误");
MyDebug.Add("配置文件路径错误", "");
return;
}
else if (File.Exists(path))
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(path);
XmlNodeList node = xmlDoc.SelectSingleNode("config").ChildNodes;
//遍历节点
foreach (XmlElement ele in node)
{
// Debug.Log(ele.Name);
#region["鼠标点击后出现特效有关的"]
if (ele.Name == "mouseClick")
{
foreach (XmlElement i1 in ele.ChildNodes)
{
switch (i1.Name)
{
case "time_hideMouseClick":
time_hideMouseClick = float.Parse(i1.InnerText);
if (time_hideMouseClick == -1)
MyDebug.Add("time_hideMouseClick:读取失败", "");
break;
case "time_changeMouseClick":
time_changeMouseClick = float.Parse(i1.InnerText);
if (time_changeMouseClick == -1)
MyDebug.Add("time_changeMouseClick:读取失败", "");
break;
default:
break;
}
}
}
#endregion
#region["加分特效有关的"]
else if (ele.Name == "addScoreEffects")
{
foreach (XmlElement i1 in ele.ChildNodes)
{
switch (i1.Name)
{
case "time_duration_addScoreMove":
time_duration_addScoreMove = float.Parse(i1.InnerText);
if (time_duration_addScoreMove == -1)
MyDebug.Add("time_duration_addScoreMove:读取失败", "");
break;
default:
break;
}
}
}
#endregion
#region["蝴蝶的配置文件"]
else if (ele.Name == "butterfly")
{
//蝴蝶
foreach (XmlElement i1 in ele.ChildNodes)
{
//Debug.Log(i1.Name);
switch (i1.Name)
{
case "flySpeed":
flySpeed = float.Parse(i1.InnerText);
if (flySpeed == -1)
MyDebug.Add("flySpeed:读取失败", "");
break;
case "distanceMinNeedMoveAwayUI":
distanceMinNeedMoveAwayUI = float.Parse(i1.InnerText);
if (distanceMinNeedMoveAwayUI == -1)
MyDebug.Add("distanceMinNeedMoveAwayUI:读取失败", "");
break;
case "allowDistanceMin":
allowDistanceMin = float.Parse(i1.InnerText);
if (allowDistanceMin == -1)
MyDebug.Add("allowDistanceMin:读取失败", "");
break;
case "time_allowAtUIMax":
time_allowAtUIMax = float.Parse(i1.InnerText);
if (time_allowAtUIMax == -1)
MyDebug.Add("time_allowAtUIMax:读取失败", "");
break;
case "time_howLongDestroy":
time_howLongDestroy = float.Parse(i1.InnerText);
if (time_howLongDestroy == -1)
MyDebug.Add("time_howLongDestroy:读取失败", "");
break;
case "time_interval_createButterfly":
time_interval_createButterfly = float.Parse(i1.InnerText);
if (time_interval_createButterfly == -1)
MyDebug.Add("time_interval_createButterfly:读取失败", "");
break;
case "totalNum_butterfly":
totalNum_butterfly = int.Parse(i1.InnerText);
if (totalNum_butterfly == -1)
MyDebug.Add("totalNum_butterfly:读取失败", "");
break;
default:
print("配置文件内部有个节点读取失败");
MyDebug.Add("配置文件内部有个节点读取失败", "");
break;
}
}
}
#endregion
}
}
}
}