void SaveMaterialData(Material mat) { materialData = new TVEElementMaterialData(); materialData.props = new List <TVEElementPropertyData>(); materialData.shader = mat.shader; for (int i = 0; i < ShaderUtil.GetPropertyCount(mat.shader); i++) { var type = ShaderUtil.GetPropertyType(mat.shader, i); var prop = ShaderUtil.GetPropertyName(mat.shader, i); if (type == ShaderUtil.ShaderPropertyType.TexEnv) { var propData = new TVEElementPropertyData(PropertyType.Texture, prop, mat.GetTexture(prop)); materialData.props.Add(propData); } if (type == ShaderUtil.ShaderPropertyType.Vector || type == ShaderUtil.ShaderPropertyType.Color) { var propData = new TVEElementPropertyData(PropertyType.Vector, prop, mat.GetVector(prop)); materialData.props.Add(propData); } if (type == ShaderUtil.ShaderPropertyType.Float || type == ShaderUtil.ShaderPropertyType.Range) { var propData = new TVEElementPropertyData(PropertyType.Value, prop, mat.GetFloat(prop)); materialData.props.Add(propData); } } }
void UpgradeTo150() { // Update elements to the new save system var elements = FindObjectsOfType <TVEElement>(); for (int i = 0; i < elements.Length; i++) { var data = elements[i].data; if (data != null) { if (data.elementShader != null) { var materialData = new TVEElementMaterialData(); materialData.props = new List <TVEElementPropertyData>(); materialData.shader = data.elementShader; materialData.props.Add(new TVEElementPropertyData(PropertyType.Value, "_ElementIntensity", data.elementIntensity)); materialData.props.Add(new TVEElementPropertyData(PropertyType.Value, "_ElementMode", data.elementMode)); materialData.props.Add(new TVEElementPropertyData(PropertyType.Texture, "_MainTex", data.mainTex)); materialData.props.Add(new TVEElementPropertyData(PropertyType.Vector, "_MainUVs", data.mainUVs)); materialData.props.Add(new TVEElementPropertyData(PropertyType.Vector, "_MainColor", data.main)); materialData.props.Add(new TVEElementPropertyData(PropertyType.Vector, "_MainColorHDR", data.main)); materialData.props.Add(new TVEElementPropertyData(PropertyType.Vector, "_WinterColor", data.winter)); materialData.props.Add(new TVEElementPropertyData(PropertyType.Vector, "_SpringColor", data.spring)); materialData.props.Add(new TVEElementPropertyData(PropertyType.Vector, "_SummerColor", data.summer)); materialData.props.Add(new TVEElementPropertyData(PropertyType.Vector, "_AutumnColor", data.autumn)); materialData.props.Add(new TVEElementPropertyData(PropertyType.Value, "_MainValue", data.main.w)); materialData.props.Add(new TVEElementPropertyData(PropertyType.Value, "_WinterValue", data.winter.w)); materialData.props.Add(new TVEElementPropertyData(PropertyType.Value, "_SpringValue", data.spring.w)); materialData.props.Add(new TVEElementPropertyData(PropertyType.Value, "_SummerValue", data.summer.w)); materialData.props.Add(new TVEElementPropertyData(PropertyType.Value, "_AutumnValue", data.autumn.w)); elements[i].materialData = materialData; } } } }
void OnEnable() { meshRenderer = gameObject.GetComponent <Renderer>(); if (meshRenderer.sharedMaterial == null || meshRenderer.sharedMaterial.name == "Element") { if (materialData == null) { materialData = new TVEElementMaterialData(); } if (materialData.shader == null) { #if UNITY_EDITOR material = new Material(Resources.Load <Material>("Internal Colors")); SaveMaterialData(material); #endif } else { material = new Material(materialData.shader); LoadMaterialData(); } material.name = "Element"; gameObject.GetComponent <Renderer>().sharedMaterial = material; } if (meshRenderer.sharedMaterial != null) { shader = meshRenderer.sharedMaterial.shader; if (meshRenderer.sharedMaterial.HasProperty(layerProp)) { layer = meshRenderer.sharedMaterial.GetInt(layerProp); } } AddElementToVolume(); }