У меня есть эта проблема.(извините за ссылки, но я пока не могу вставлять изображения).Я хотел бы сериализовать положение, вращение, имя и текущую сцену gameObject.Но работает только имя объекта текущей сцены (строки), а не данные о положении (тип 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();
}
Это код сохраненного файла:
XML-код, сохраненный
все выглядит нормально. Это функция для чтения файла и десериализации потока:
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 и Quaternions, чтобы иметь возможность десериализовать и прочитать их?