/** * @brief 행성 정보를 저장한다. */ public static void SaveVoxelPlanet(GameObject planet, string savePath) { if (planet == null) { return; } string dir = Path.GetDirectoryName(savePath) + "/" + Path.GetFileNameWithoutExtension(savePath); ResetDirectory(dir); SaveLocation(dir); var planetPath = dir + "/" + Path.GetFileName(savePath); var planetInfo = planet.GetComponent <VoxelPlanetInfo>(); //행성 생성 정보 저장 var tfTerrain = planet.transform.Find("Terrain"); var tfClouds = planet.transform.Find("Clouds"); var savePlanet = new SavePlanet(planetInfo, tfTerrain, tfClouds); IFormatter formatter = new BinaryFormatter(); Stream stream = new FileStream(planetPath, FileMode.Create, FileAccess.Write, FileShare.None); formatter.Serialize(stream, savePlanet); stream.Close(); //행성 데이터 저장 //dir += Path.GetFileNameWithoutExtension(savePath) + "_Data"; SavePlanetData(tfTerrain, dir); SavePlanetData(tfClouds, dir); }
// Start is called before the first frame update void Start() { SavePlanet temp = FindObjectOfType <SavePlanet>(); if (temp != null) { temp.UpdatePlanets(); } }
/** * @brief Load된 정보로 Planet정보 구성 * @param loadInfo : Load된 정보 */ public void ReLoadInfo(SavePlanet loadInfo) { if (loadInfo == null) { return; } Init(loadInfo.name); isSphere = loadInfo.isSphere; modifyList = new Dictionary <WorldPos, List <ModifyArea> >(loadInfo.modifyList); //Area Object 정보를 구성하고 생성한다. if (loadInfo.areaObjPath != null) { foreach (var objPath in loadInfo.areaObjPath) { if (modifyAreaObject.ContainsKey(objPath)) { if (modifyAreaObject[objPath] != null) { continue; } } var obj = Instantiate(Resources.Load(objPath), Vector3.zero, Quaternion.Euler(Vector3.zero)) as GameObject; //생성된 Object는 참조 할 때만 활성화 obj.SetActive(false); //렌더 비활성화. var mesh = obj.GetComponent <MeshRenderer>(); if (mesh != null) { mesh.enabled = false; } //인스펙터에서 숨긴다. obj.hideFlags = HideFlags.HideInHierarchy; modifyAreaObject[objPath] = obj; } } if (loadInfo.terrainInfo != null) { terrainInfo = loadInfo.terrainInfo.DeepCopy(); } if (loadInfo.cloudsInfo != null) { cloudInfo = loadInfo.cloudsInfo.DeepCopy(); } }
public static SavePlanet LoadPlanet(string path) { if (!File.Exists(path)) { return(null); } FileStream stream = new FileStream(path, FileMode.Open); SavePlanet save = (SavePlanet)formatter.Deserialize(stream); stream.Close(); //foreach (KeyValuePair<WorldPos, List<ModifyArea>> pair in save.squareArea) //{ // Debug.Log(pair.Value[0].GetModifyFillMode()); //} return(save); }