【发布时间】:2018-06-01 14:59:35
【问题描述】:
我有这个问题。 (对不起链接,但我还不允许插入图像)。 我想序列化一个游戏对象的位置、旋转、名称和当前场景。 但是只有当前场景的对象名称(字符串)可以正常工作,而不是位置数据(Vector3 类型)和旋转(四元数类型)。 这是要序列化的类,很简单:
[Serializable]
public class SpaceObjectData
{
[DataMember]
public string sObjectName;
[DataMember]
public Vector3 transformPosition;
[DataMember]
public Quaternion transformRotation;
[DataMember]
public string sceneLocation;
}
这是序列化我的课程并将其保存在文件中的代码:
public void SetState()
{
// Stream the file with a File Stream. (Note that File.Create() 'Creates' or 'Overwrites' a file.)
FileStream file = File.Create(path);
//Serialize to xml
DataContractSerializer bf = new DataContractSerializer(ObjectData.GetType());
MemoryStream streamer = new MemoryStream();
//Serialize the file
bf.WriteObject(streamer, ObjectData);
streamer.Seek(0, SeekOrigin.Begin);
//Save to disk
file.Write(streamer.GetBuffer(), 0, streamer.GetBuffer().Length);
file.Close();
}
这是保存的文件代码:
一切似乎都很好 这是读取文件和反序列化流的函数:
public void GetState()
{
if (System.IO.File.Exists(path))
{
string text = System.IO.File.ReadAllText(path);
using (Stream stream = new MemoryStream())
{
byte[] bytes = Encoding.UTF8.GetBytes(text);
stream.Write(bytes, 0, bytes.Length);
stream.Position = 0;
DataContractSerializer serializer = new DataContractSerializer((ObjectData.GetType()));
ObjectData = (SpaceObjectData)serializer.ReadObject(stream);
}
print(ObjectData.sObjectName); //output OK
print(ObjectData.sceneLocation); //output OK
print(ObjectData.transformPosition); //output wrong (always 0,0,0)
print(ObjectData.transformRotation); //output wrong (always 0,0,0,0)
}
}
哪里错了? 为什么不读取 Vector3 和 Quaternion 数据? 我应该如何保存 Vector3 和四元数以便能够反序列化和读取它们?
【问题讨论】:
-
代码不要用图片,直接贴出来。
-
好的,我编辑帖子。
标签: c# unity3d deserialization