// 只导出材质信息,不实际导出材质
    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; // 默认给个白
    }