在Unity中使用C#读写XML配置文件是一种常见的数据持久化方式,适合存储游戏设置、玩家偏好或关卡配置等结构化数据。Unity支持标准的.NET XML类库,可以方便地通过
System.Xml和
System.Xml.Serialization来操作XML文件。
1. 创建可读写的XML文件路径
在Unity中,不能直接写入项目Assets目录下的文件(打包后更不可行),应使用
Application.persistentDataPath来获取一个可读写的路径。 string filePath = Path.Combine(Application.persistentDataPath, "config.xml");
这个路径在不同平台指向不同的实际目录,例如:
Windows:C:/Users/[用户]/AppData/LocalLow/[公司名]/[项目名]Android: 应用私有目录 iOS: 沙盒Documents目录
2. 定义用于序列化的数据类
要将对象保存为XML,需定义一个C#类,并添加适当的序列化属性。
示例:
[System.Serializable]public class GameConfig
{
public float musicVolume = 1.0f;
public bool isFullscreen = true;
public int resolutionWidth = 1920;
public int resolutionHeight = 1080;
}
注意:
[System.Serializable]是必须的,以便让XmlSerializer能处理该类。
3. 写入XML文件(序列化)
使用
XmlSerializer将对象写入文件。 public void SaveConfig(GameConfig config)
{
var serializer = new XmlSerializer(typeof(GameConfig));
using (var stream = new FileStream(filePath, FileMode.Create))
{
serializer.Serialize(stream, config);
}
}
调用示例:
GameConfig config = new GameConfig();config.musicVolume = 0.7f;
SaveConfig(config);
4. 读取XML文件(反序列化)
从文件加载XML数据回对象。
public GameConfig LoadConfig(){
if (!File.Exists(filePath))
{
return new GameConfig(); // 返回默认值
}
var serializer = new XmlSerializer(typeof(GameConfig));
using (var stream = new FileStream(filePath, FileMode.Open))
{
return (GameConfig)serializer.Deserialize(stream);
}
}
调用示例:
GameConfig config = LoadConfig();Debug.Log("音乐音量:" + config.musicVolume);
5. 注意事项与建议
确保在使用File相关操作时引入using System.IO;多线程环境下读写XML需加锁,避免冲突 可在编辑器中测试时使用
Application.dataPath,但发布后请务必切换到
persistentDataPathXML文件可被人轻易查看和修改,敏感数据建议加密或改用二进制序列化 异常处理:建议在读写时包裹
try-catch,防止因文件损坏导致崩溃
基本上就这些。Unity中读写XML并不复杂,关键是选对路径并正确使用序列化机制。只要类结构清晰,XML就能自动映射字段,非常适合作为轻量级配置方案。
