首先,表明这个类可序列化
[Serializable]
public class ObjectData
{
public float xPos, yPos, zPos;
public float xRot, yRot, zRot;
public float xScl, yScl, zScl;
public string h_prefabName; // Hierarchy name
public string p_prefabPath; // Project name
}
public void Save() // 将序列化的对象保存到 一个 路径下,生成一个文本保存信息
{
BinaryFormatter bf = new BinaryFormatter();
// persistentDataPath streamingAssetsPath
//FileStream file = File.Open(Application.dataPath + "/Brush Tools/SaveInfo/playerInfo.dat", FileMode.OpenOrCreate);
FileStream file = File.Open(Application.persistentDataPath + "playerInfo.dat", FileMode.OpenOrCreate);
//List<ObjectData> objData = new List<ObjectData>();
List<ObjectData> objData = new List<ObjectData>();
for (int i = 0; i < run_Obj.Count; i++)
{
objData.Add(new ObjectData());
}
for(int i =0;i< run_Obj.Count;i++)
{
objData[i].xPos = run_Obj[i].transform.position.x;
objData[i].yPos = run_Obj[i].transform.position.y;
objData[i].zPos = run_Obj[i].transform.position.z;
objData[i].xRot = run_Obj[i].transform.eulerAngles.x;
objData[i].yRot = run_Obj[i].transform.eulerAngles.y;
objData[i].zRot = run_Obj[i].transform.eulerAngles.z;
objData[i].xScl = run_Obj[i].transform.localScale.x;
objData[i].yScl = run_Obj[i].transform.localScale.y;
objData[i].zScl = run_Obj[i].transform.localScale.z;
}
// 序列化
bf.Serialize(file, objData);
file.Close();
}
public void Load() // 读取保存的信息,还原物体属性
{
if (File.Exists(Application.persistentDataPath + "playerInfo.dat"))
{
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Open(Application.persistentDataPath + "playerInfo.dat", FileMode.Open);
// 反序列化
List<ObjectData> objData = (List<ObjectData>)bf.Deserialize(file);
file.Close();
for(int i=0;i< run_Obj.Count;i++)
{
run_Obj[i].transform.position = new Vector3(objData[i].xPos,objData[i].yPos, objData[i].zPos);
run_Obj[i].transform.rotation = Quaternion.Euler(new Vector3(objData[i].xRot, objData[i].yRot, objData[i].zRot));
run_Obj[i].transform.localScale = new Vector3(objData[i].xScl, objData[i].yScl, objData[i].zScl);
}
}
}