public void LoadGameData() { XmlDocument xml = new XmlDocument(); xml.Load(path); XmlNode root = xml.SelectSingleNode("saveData"); XmlNode zoneGroupNode = root.SelectSingleNode("zoneGroup"); XmlNode markPositionGroupNode = root.SelectSingleNode("markPositionGroup"); //read zone/scene/animatePart ZoneGroupManager zoneGroupManager = GameObject.Find("ZoneGroup").transform.GetComponent <ZoneGroupManager>(); for (int i = 1; i <= 4; i++) { XmlNode zoneNode = zoneGroupNode.SelectSingleNode("zone" + i.ToString()); //set mask zoneGroupManager.maskArray[i].gameObject.SetActive(BoolParse(zoneNode.Attributes["active"].Value)); //set scene foreach (Transform scene in zoneGroupManager.zoneArray[i]) { XmlNode sceneNode = zoneNode.SelectNodes("scene[@name='" + scene.gameObject.name + "']")[0]; //set active scene if (scene.gameObject.name == zoneNode.Attributes["activeSceneName"].Value) { scene.gameObject.SetActive(true); } else { scene.gameObject.SetActive(false); } //set animate part //find all animatePart AnimatePartBase[] animatePartBaseGroup = scene.GetComponentsInChildren <AnimatePartBase>(true); List <Transform> animatePartList = new List <Transform>(); foreach (AnimatePartBase child in animatePartBaseGroup) { child.SetPhase(int.Parse(sceneNode.SelectNodes("animatePart[@name='" + child.gameObject.name + "']")[0].Attributes["phase"].Value)); } } } //set markPosition Transform markPositionGroup = GameObject.Find("MarkPositionGroup").transform; foreach (Transform child in markPositionGroup) { child.GetComponent <MarkPositionBase>().SetPhase(int.Parse(markPositionGroupNode.SelectNodes("markPosition[@name='" + child.gameObject.name + "']")[0].Attributes["phase"].Value)); child.gameObject.SetActive(BoolParse(markPositionGroupNode.SelectNodes("markPosition[@name='" + child.gameObject.name + "']")[0].Attributes["active"].Value)); } }
// Use this for initialization void Start() { zoneGroupManager = GameObject.Find("ZoneGroup").GetComponent <ZoneGroupManager>(); //print(zoneGroupManager.name); Renderer[] renderers = zoneGroupManager.zoneArray[maskIndex].GetComponentsInChildren <Renderer>(true); //print(renderers.Length); foreach (Renderer child in renderers) { renderListArray.Add(child); } Vector3 pos = transform.position; Vector3 normal = -transform.forward; for (int i = 0; i < renderListArray.Count; i++) { renderListArray[i].material.SetVector("_pV", new Vector4(pos.x, pos.y, pos.z, 0)); renderListArray[i].material.SetVector("_pN", new Vector4(normal.x, normal.y, normal.z, 0)); } }
public void SaveGameData() { XmlDocument xml = new XmlDocument(); XmlElement root = xml.CreateElement("saveData"); XmlElement zoneGroupElement = xml.CreateElement("zoneGroup"); XmlElement markPositionGroupElement = xml.CreateElement("markPositionGroup"); //write zone/scene/animatePart ZoneGroupManager zoneGroupManager = GameObject.Find("ZoneGroup").transform.GetComponent <ZoneGroupManager>(); for (int i = 1; i <= 4; i++) { XmlElement zoneElement = xml.CreateElement("zone" + i.ToString()); zoneElement.SetAttribute("active", zoneGroupManager.maskArray[i].gameObject.activeSelf.ToString()); zoneElement.SetAttribute("activeSceneName", "null"); foreach (Transform scene in zoneGroupManager.zoneArray[i]) { XmlElement sceneElement = xml.CreateElement("scene"); sceneElement.SetAttribute("name", scene.name); zoneElement.AppendChild(sceneElement); //set zone-active-scene if (scene.gameObject.activeSelf == true) { zoneElement.SetAttribute("activeSceneName", scene.name); } //find all animatePart AnimatePartBase[] animatePartBaseGroup = scene.GetComponentsInChildren <AnimatePartBase>(true); foreach (AnimatePartBase child in animatePartBaseGroup) { XmlElement animatePartElement = xml.CreateElement("animatePart"); animatePartElement.SetAttribute("name", child.transform.name); animatePartElement.SetAttribute("phase", child.phase.ToString()); sceneElement.AppendChild(animatePartElement); } } //if the mask is inactive, also set zone-active-scene to null /* * if (zoneGroupManager.maskArray[i].gameObject.activeSelf == false) * { * zoneElement.SetAttribute("activeSceneName", "null"); * } */ //set children zoneGroupElement.AppendChild(zoneElement); } //write markPosition Transform markPositionGroup = GameObject.Find("MarkPositionGroup").transform; foreach (Transform child in markPositionGroup) { XmlElement markPositionElement = xml.CreateElement("markPosition"); markPositionElement.SetAttribute("name", child.gameObject.name); markPositionElement.SetAttribute("phase", child.GetComponent <MarkPositionBase>().phase.ToString()); markPositionElement.SetAttribute("active", child.gameObject.activeSelf.ToString()); markPositionGroupElement.AppendChild(markPositionElement); } //set children root.AppendChild(zoneGroupElement); root.AppendChild(markPositionGroupElement); xml.AppendChild(root); //save it xml.Save(path); }