/// <summary>
        /// 获取当前Render 组件关联的所有材质球的Shader属性定义信息
        /// </summary>
        /// <param name="renderTarget"></param>
        /// <param name="gameObjectRenderInfor"></param>
        public void GetMaterialShaderProperty(Renderer renderTarget, ref GameObjectRenderPropertyInfor gameObjectRenderInfor)
        {
            if (renderTarget == null)
            {
                return;
            }
            if (gameObjectRenderInfor == null)
            {
                gameObjectRenderInfor = new GameObjectRenderPropertyInfor();
            }
            else
            {
                gameObjectRenderInfor.ClearRenderPropertyInfor();
            }


            if (renderTarget.sharedMaterials == null || renderTarget.sharedMaterials.Length == 0)
            {
                return;
            }
            for (int dex = 0; dex < renderTarget.sharedMaterials.Length; ++dex)
            {
                #region 解析当前Render 关联的所有材质球
                MeterialPropertysInfor materialInfor = new MeterialPropertysInfor();
                materialInfor.m_MaterialIndex = dex;

                Material mat = renderTarget.sharedMaterials[dex];
                if (mat == null)
                {
                    Debug.LogEditorInfor(string.Format("Target Object : {0}  ShaderMaterial Index={1} is Null,Please Check is Right ?"));
                    gameObjectRenderInfor.AddMaterialInfor(materialInfor);
                    continue;
                }
                materialInfor.m_MeterialName = mat.name;
                #region  解析Shader中每一个定义的属性

                int shaderPropertysCount = ShaderUtil.GetPropertyCount(mat.shader);  //获取一个Shader中定义的属性个数
                for (int subIndex = 0; subIndex < shaderPropertysCount; ++subIndex)
                {
                    MaterialPropertyItem propertyItemInfor = new MaterialPropertyItem();
                    propertyItemInfor.m_PropertyIndex      = subIndex;
                    propertyItemInfor.m_PropertyName       = ShaderUtil.GetPropertyName(mat.shader, subIndex);
                    propertyItemInfor.m_ShaderPropertyEnum = ShaderPropertyType2ShaderPropertyEnum(ShaderUtil.GetPropertyType(mat.shader, subIndex));
                    propertyItemInfor.m_PropertyValue      = GetPropertyValue(mat, propertyItemInfor.m_PropertyName, propertyItemInfor.m_ShaderPropertyEnum);
                    materialInfor.AddPropertyItemInfor(propertyItemInfor.m_PropertyIndex, propertyItemInfor);

                    //**** 使用 mat.GetXXX()  接口根据不同的 ShaderPropertyType 返回一个值
                    //         Debug.LogEditorInfor(propertyItemInfor.ToString());
                }

                #endregion

                gameObjectRenderInfor.AddMaterialInfor(materialInfor);
                #endregion
            }
        }
Exemple #2
0
 public void AddMaterialInfor(MeterialPropertysInfor materialInfor)
 {
     m_AllConnectedMaterialsInfor.Add(materialInfor);
 }