您的位置:首页 > 移动开发 > Unity3D

Unity C# 序列化 保存物体信息

2016-04-12 17:40 134 查看
首先,表明这个类可序列化

[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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: