я читал что можно дописывать данные в файл путем FileMode.Append.
Дописать в файл удалось, файл открыл блокнотом и Vector4 там значился, значит данные все таки в файле.
Но вот при возврате возникает ошибка.
При загрузке этого сохранения Unity показывает ошибку в строчке
Код
objectsT = (List<myVector4>)formatter.Deserialize(streamT);
InvalidCastException: Specified cast is not valid. SaveGameToM.LoadT () (at Assets / Script / SaveGameToM.cs: 111)
Что не верно?
Код
[System.Serializable]
public struct myVector3
{
public float x, y, z;
}
[System.Serializable]
public struct myVector4
{
public float j, k, l;
}
[SerializeField] public List<myVector3> ObjectsPositions = new List<myVector3>();
[SerializeField] public List<myVector4> ObjectsPositionsT = new List<myVector4>();
public void Start()
{
if (File.Exists(Application.persistentDataPath + "/saves/save.sav"))
{
BackMyCubes();
BackMyTriangles();
}
}
public void BackMyCubes()
{
ObjectsPositions = Load();
foreach (var pos in ObjectsPositions)
{
GameObject i = Instantiate(Cube1Pref, new Vector3(pos.x, pos.y, pos.z), Quaternion.identity);
}
ObjectsPositions.Clear();
}
public void BackMyTriangles()
{
ObjectsPositionsT = LoadT();
foreach (var posT in ObjectsPositionsT)
{
GameObject t = Instantiate(Triangle1Pref, new Vector4(posT.j, posT.k, posT.l), Quaternion.identity);
}
ObjectsPositionsT.Clear();
}
public void ManualSaving()
{
foreach (var obj in GameObject.FindGameObjectsWithTag("Cube1"))
{
myVector3 i = new myVector3();
i.x = obj.transform.position.x;
i.y = obj.transform.position.y;
i.z = obj.transform.position.z;
ObjectsPositions.Add(i);
}
SaveCu(ObjectsPositions);
}
public void ManualSavingT()
{
foreach (var objT in GameObject.FindGameObjectsWithTag("Triangle1"))
{
myVector4 t = new myVector4();
t.j = objT.transform.position.x;
t.k = objT.transform.position.y;
t.l = objT.transform.position.z;
ObjectsPositionsT.Add(t);
}
SaveT(ObjectsPositionsT);
}
public List<myVector3> Load()
{
List<myVector3> objects;
BinaryFormatter formatter = new BinaryFormatter();
using (FileStream stream = new FileStream(Application.persistentDataPath + "/saves/save.sav", FileMode.Open))
{
objects = (List<myVector3>)formatter.Deserialize(stream);
}
return objects;
}
public List<myVector4> LoadT()
{
List<myVector4> objectsT;
BinaryFormatter formatter = new BinaryFormatter();
using (FileStream streamT = new FileStream(Application.persistentDataPath + "/saves/save.sav", FileMode.Open))
{
objectsT = (List<myVector4>)formatter.Deserialize(streamT);
}
return objectsT;
}
void SaveCu(List<myVector3> positions)
{
BinaryFormatter formatter = new BinaryFormatter();
using (FileStream stream = new FileStream(Application.persistentDataPath + "/saves/save.sav", FileMode.Create))
{
formatter.Serialize(stream, positions);
stream.Close();
}
positions.Clear();
}
void SaveT(List<myVector4> positionsT)
{
BinaryFormatter formatter = new BinaryFormatter();
using (FileStream streamT = new FileStream(Application.persistentDataPath + "/saves/save.sav", FileMode.Append))
{
formatter.Serialize(streamT, positionsT);
streamT.Close();
}
positionsT.Clear();
}
}