繁体   English   中英

在 IOS 中保存和加载 XML 文件在我的 Unity 项目中产生问题

[英]Saving and Loading XML File in IOS creates Problem In My Unity Project

我正在使用 Unity3d 并使用 2019.3.3 编辑器构建游戏。

我在 IOS 版本中遇到了问题。

我正在 android 设备上尝试我的游戏,它运行良好,但是昨天我在 IOS 设备上尝试了我的游戏,但在 IOS 上保存和加载 xml 文件时遇到了问题。

我正在使用此代码进行保存:

SaveAvatar() {

XmlSerializer serializer = new XmlSerializer(typeof(AvatarData));        
FileStream stream = new FileStream(Application.persistentDataPath + "avatar_data.xml", FileMode.Create);        
serializer.Serialize(stream, avatarData);        
stream.Close();
}

我正在使用此代码进行加载:

LoadAvatar() {
XmlSerializer serializer = new XmlSerializer(typeof(AvatarData));        
FileStream stream = new FileStream(Application.persistentDataPath + "avatar_data.xml", FileMode.Open);        
avatarData = (AvatarData)serializer.Deserialize(stream);        
stream.Close();
}

Also in OnEnable function I create my xml file if it does not exists: Without this code, it is not saving the game in editor or android as well.

OnEnable () { 
if (!File.Exists(Application.persistentDataPath + "avatar_data.xml"))        {            avatarData.jobID = 10000;
            
SaveAvatar();        
}

即使序列化一个只包含一个 int 的类,这些代码在 IOS 中也不起作用。 (我尝试保存另一个类以查看我的主要保存类是否有问题)

我的保存类包含以下变量类型:

字符串、整数、枚举、浮点数、列表、其他类和自类变量

以下是我班级的样本变量:(来自所有类型变量的样本)

[System.Serializable]
public class AvatarData{ 
   
public bool dead;

public string avatarName; 
      
public int age;   
    
public float health;

public AvatarData father; (Self Class variable) 

public EnumGender gender; (Enum)
        
public JobClass job; (Another Class variable)

public List<GroupClass> groups; (Another Class List variable) 
   
public List<AvatarData> children; (Self Class List variable) 
   
public List<PetClass> pets;    
public List<LogClass> logs;    
public List<JobClass> Jobs;    
public List<EventClass> tempEvents;    
public List<ItemsClass> myItems;
}

当我使用 SaveAvatar 或 LoadAvatar 函数时,在 IOS 中,它会出现错误并且代码不会继续进一步行。 没有保存它工作正常。

谁能告诉我我的代码有什么问题

谢谢

正如评论中所说:

切勿对系统路径使用简单的字符串连接!

并特别注意

Application.persistentDataPath + "avatar_data.xml" 

没有任何分隔符是没有意义的,因为这将是一个文件之外的

Application.persistentDataPath

文件夹,因为它会导致类似

/rootfolder/applicationfolderavatar_data.xml

您需要在它们之间使用\\/ ,例如

/rootfolder/applicationfolder/avatar_data.xml

它在 Android 上工作的原因可能是不太严格的文件访问规则,因此您允许在应用程序文件夹之外写入文件,在 iOs afaik 中,默认情况下您被严格沙盒化到应用程序文件夹。


因此,而是使用Path.Combine ,它根据正在运行的操作系统使用正确的路径分隔符

Path.Combine(Application.persistentDataPath, "avatar_data.xml")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM