public override void WriteXml(System.Xml.XmlWriter writer) { if (!TrashSoupGame.Instance.EditorMode) { contentPath = "../../../../TrashSoupContent/Materials/"; } else { contentPath = "../../../TrashSoup/TrashSoupContent/Materials/"; } base.WriteXml(writer); writer.WriteElementString("LODState", LODState.ToString()); writer.WriteStartElement("LODs"); foreach (String path in Paths) { if (path != null) { writer.WriteElementString("ModelPath", path); } else { writer.WriteElementString("ModelPath", ""); } } writer.WriteEndElement(); writer.WriteStartElement("Materials"); foreach (Material mat in Mat) { if (mat != null) { if (mat.Name == "testSBMat2") { XmlSerializer serializer = new XmlSerializer(typeof(SkyboxMaterial)); using (FileStream file = new FileStream(Path.GetFullPath(contentPath) + mat.Name + ".xml", FileMode.Create)) { serializer.Serialize(file, mat); } } if (mat.Name == "testWaterMat") { XmlSerializer serializer = new XmlSerializer(typeof(WaterMaterial)); using (FileStream file = new FileStream(Path.GetFullPath(contentPath) + mat.Name + ".xml", FileMode.Create)) { serializer.Serialize(file, mat); } } if (mat.Name == "testMirrorMat") { XmlSerializer serializer = new XmlSerializer(typeof(MirrorMaterial)); using (FileStream file = new FileStream(Path.GetFullPath(contentPath) + mat.Name + ".xml", FileMode.Create)) { serializer.Serialize(file, mat); } } if (mat.Name != "testSBMat2" && mat.Name != "testWaterMat" && mat.Name != "testMirrorMat") { XmlSerializer serializer = new XmlSerializer(typeof(Material)); using (FileStream file = new FileStream(Path.GetFullPath(contentPath) + mat.Name + ".xml", FileMode.Create)) { serializer.Serialize(file, mat); } } //writer.WriteStartElement("Material"); writer.WriteElementString("Name", mat.Name); //writer.WriteElementString("EffectPath", ResourceManager.Instance.Effects.FirstOrDefault(x => x.Value == mat.MyEffect).Key); //(mat as IXmlSerializable).WriteXml(writer); //writer.WriteEndElement(); } } writer.WriteEndElement(); writer.WriteElementString("LodControlled", XmlConvert.ToString(LodControlled)); }
IEnumerator CheckForLOD() { while (true) { yield return(new WaitForSeconds(0.5f)); bool changed = false; if (Camera.main != null) { float distance = Mathf.Abs((transform.position - Camera.main.transform.position).magnitude); if (distance < 30) { if ((state != LODState.High)) { mf.mesh = LODMesh_High; state = LODState.High; changed = true; } } else if (distance < 50) { if (state != LODState.Medium) { if (hasSubmeshes) { for (int i = 0; i < mf.mesh.subMeshCount - 1; i++) { mf.mesh.SetTriangles(LODMesh_Medium.GetTriangles(i), i); } } else { mf.mesh = LODMesh_Medium; } state = LODState.Medium; changed = true; } } else { if (state != LODState.Low) { if (hasSubmeshes) { for (int i = 0; i < mf.mesh.subMeshCount - 1; i++) { mf.mesh.SetTriangles(LODMesh_Low.GetTriangles(i), i); } } else { mf.mesh = LODMesh_Low; } state = LODState.Low; changed = true; } } } if (changed) { //mf.mesh.RecalculateNormals(); //mf.mesh.RecalculateBounds(); } } }