// 只导出材质信息,不实际导出材质 private static KSerializeMaterial __DoExportMaterial(Material mat, float scaleTexture = 1f) { string matPath = AssetDatabase.GetAssetPath(mat).Replace("Assets/", ""); if (string.IsNullOrEmpty(matPath)) { Log.Warning("没有路径材质Material: {0} 可能是动态创建的?", mat.name); return(null); } var props = new List <KSerializeMaterialProperty>(); IEnumerator <KSerializeMaterialProperty> shaderPropEnumtor = _ShaderPropEnumtor(mat, scaleTexture); while (shaderPropEnumtor.MoveNext()) { KSerializeMaterialProperty shaderProp = shaderPropEnumtor.Current; if (shaderProp != null) { props.Add(shaderProp); } } var shaderBuildPath = _BuildShader(mat.shader); KSerializeMaterial xMat = ScriptableObject.CreateInstance <KSerializeMaterial>(); xMat.MaterialName = matPath; xMat.ShaderName = mat.shader.name; xMat.ShaderPath = shaderBuildPath; xMat.Props = props; return(xMat); }
private static KSerializeMaterialProperty _GetMatRange(Material mm, string propName) { if (mm.HasProperty(propName)) { KSerializeMaterialProperty shaderProp = new KSerializeMaterialProperty(); shaderProp.Type = KSerializeMaterialProperty.ShaderType.Range; shaderProp.PropName = propName; float propValue = mm.GetFloat(propName); shaderProp.PropValue = propValue.ToString(); return(shaderProp); } return(null); }
private static KSerializeMaterialProperty _GetShaderVectorProp(Material mm, string texProp) { if (mm.HasProperty(texProp)) { KSerializeMaterialProperty shaderProp = new KSerializeMaterialProperty(); shaderProp.Type = KSerializeMaterialProperty.ShaderType.Vector; shaderProp.PropName = texProp; Vector4 tex = mm.GetVector(texProp); shaderProp.PropValue = tex.ToString(); return(shaderProp); } return(null); }
private static KSerializeMaterialProperty _GetMatColor(Material mm, string colorProp) { if (mm.HasProperty(colorProp)) { KSerializeMaterialProperty shaderProp = new KSerializeMaterialProperty(); shaderProp.Type = KSerializeMaterialProperty.ShaderType.Color; shaderProp.PropName = colorProp; Color color = mm.GetColor(colorProp); shaderProp.PropValue = color.ToString(); return(shaderProp); } return(null); // 默认给个白 }
private static KSerializeMaterialProperty _GetShaderTexProp(Material mm, string texProp, float scaleTexture = 1f) { if (mm.HasProperty(texProp)) { Texture tex = mm.GetTexture(texProp); if (tex != null) { KSerializeMaterialProperty shaderProp = new KSerializeMaterialProperty(); shaderProp.PropName = texProp; if (tex is Texture2D) { var texTiling = mm.GetTextureScale(texProp); // 纹理+tiling+offset var texOffset = mm.GetTextureOffset(texProp); var texPath = KDependencyBuild.BuildDepTexture(tex, scaleTexture); shaderProp.Type = KSerializeMaterialProperty.ShaderType.Texture; shaderProp.PropValue = string.Format("{0}|{1}|{2}|{3}|{4}", texPath, texTiling.x, texTiling.y, texOffset.x, texOffset.y); } else { Log.Warning("找到一个非Texture2D, Type:{0} Mat:{1} PropName:{2}", tex.GetType(), mm.name, texProp); shaderProp.Type = KSerializeMaterialProperty.ShaderType.RenderTexture; // Shader的RenderTexture不打包,一般由脚本动态生成 shaderProp.PropValue = null; } return(shaderProp); } else { Log.Info("[_GetShaderTexProp]处理纹理时发现获取不到纹理, 材质{0} Shader属性{1}", mm.name, texProp); return(null); } } return(null); }
private static KSerializeMaterialProperty _GetShaderVectorProp(Material mm, string texProp) { if (mm.HasProperty(texProp)) { KSerializeMaterialProperty shaderProp = new KSerializeMaterialProperty(); shaderProp.Type = KSerializeMaterialProperty.ShaderType.Vector; shaderProp.PropName = texProp; Vector4 tex = mm.GetVector(texProp); shaderProp.PropValue = tex.ToString(); return shaderProp; } return null; }
private static KSerializeMaterialProperty _GetShaderTexProp(Material mm, string texProp, float scaleTexture = 1f) { if (mm.HasProperty(texProp)) { Texture tex = mm.GetTexture(texProp); if (tex != null) { KSerializeMaterialProperty shaderProp = new KSerializeMaterialProperty(); shaderProp.PropName = texProp; if (tex is Texture2D) { var texTiling = mm.GetTextureScale(texProp); // 纹理+tiling+offset var texOffset = mm.GetTextureOffset(texProp); var texPath = KDependencyBuild.BuildDepTexture(tex, scaleTexture); shaderProp.Type = KSerializeMaterialProperty.ShaderType.Texture; shaderProp.PropValue = string.Format("{0}|{1}|{2}|{3}|{4}", texPath, texTiling.x, texTiling.y, texOffset.x, texOffset.y); } else { Log.Warning("找到一个非Texture2D, Type:{0} Mat:{1} PropName:{2}", tex.GetType(), mm.name, texProp); shaderProp.Type = KSerializeMaterialProperty.ShaderType.RenderTexture; // Shader的RenderTexture不打包,一般由脚本动态生成 shaderProp.PropValue = null; } return shaderProp; } else { Log.Info("[_GetShaderTexProp]处理纹理时发现获取不到纹理, 材质{0} Shader属性{1}", mm.name, texProp); return null; } } return null; }
private static KSerializeMaterialProperty _GetMatRange(Material mm, string propName) { if (mm.HasProperty(propName)) { KSerializeMaterialProperty shaderProp = new KSerializeMaterialProperty(); shaderProp.Type = KSerializeMaterialProperty.ShaderType.Range; shaderProp.PropName = propName; float propValue = mm.GetFloat(propName); shaderProp.PropValue = propValue.ToString(); return shaderProp; } return null; }
private static KSerializeMaterialProperty _GetMatColor(Material mm, string colorProp) { if (mm.HasProperty(colorProp)) { KSerializeMaterialProperty shaderProp = new KSerializeMaterialProperty(); shaderProp.Type = KSerializeMaterialProperty.ShaderType.Color; shaderProp.PropName = colorProp; Color color = mm.GetColor(colorProp); shaderProp.PropValue = color.ToString(); return shaderProp; } return null; // 默认给个白 }