Exemplo n.º 1
0
        private static void GetProperties(ref List <TextureProp> m_Properties, ShaderImporter importer)
        {
            var shader        = importer.GetShader();
            var propertyCount = ShaderUtil.GetPropertyCount(shader);

            for (var i = 0; i < propertyCount; i++)
            {
                if (ShaderUtil.GetPropertyType(shader, i) != ShaderUtil.ShaderPropertyType.TexEnv)
                {
                    continue;
                }

                var propertyName = ShaderUtil.GetPropertyName(shader, i);
                var displayName  = ShaderUtil.GetPropertyDescription(shader, i);                 // might be empty
                var texture      = importer.GetDefaultTexture(propertyName);

                var assetBundleName = "";
                if (texture != null)
                {
                    var textureAssetPath = AssetDatabase.GetAssetPath(texture);
                    assetBundleName = AssetDatabase.GetImplicitAssetBundleName(textureAssetPath);
                }

                var temp = new TextureProp
                {
                    propertyName    = propertyName,
                    displayName     = displayName,
                    texture         = texture,
                    assetBundleName = assetBundleName,
                    //dimension = ShaderUtil.GetTexDim(shader, i)
                };
                m_Properties.Add(temp);
            }
        }
        protected override void InitializeExtraDataInstance(Object extraTarget, int targetIndex)
        {
            var data = (ShaderProperties)extraTarget;

            data.CleanUp();

            var importer = targets[targetIndex] as ShaderImporter;

            if (importer == null)
            {
                return;
            }

            var shader = importer.GetShader();

            if (shader == null)
            {
                return;
            }

            var propertyCount = ShaderUtil.GetPropertyCount(shader);

            for (var i = 0; i < propertyCount; i++)
            {
                if (ShaderUtil.GetPropertyType(shader, i) != ShaderUtil.ShaderPropertyType.TexEnv)
                {
                    continue;
                }

                var propertyName = ShaderUtil.GetPropertyName(shader, i);
                var displayName  = ShaderUtil.GetPropertyDescription(shader, i); // might be empty
                var modifiable   = !ShaderUtil.IsShaderPropertyNonModifiableTexureProperty(shader, i);

                Texture tex;
                if (!modifiable)
                {
                    tex = importer.GetNonModifiableTexture(propertyName);
                }
                else
                {
                    tex = importer.GetDefaultTexture(propertyName);
                }

                var temp = new TextureProp
                {
                    propertyName = propertyName,
                    texture      = tex,
                    dimension    = ShaderUtil.GetTexDim(shader, i),
                    displayName  = displayName,
                    modifiable   = modifiable
                };
                data.m_Properties.Add(temp);
            }
        }
        protected override void ResetValues()
        {
            base.ResetValues();

            m_Properties.Clear();

            var importer = target as ShaderImporter;

            if (importer == null)
            {
                return;
            }

            var shader = importer.GetShader();

            if (shader == null)
            {
                return;
            }

            var propertyCount = ShaderUtil.GetPropertyCount(shader);

            for (var i = 0; i < propertyCount; i++)
            {
                if (ShaderUtil.GetPropertyType(shader, i) != ShaderUtil.ShaderPropertyType.TexEnv)
                {
                    continue;
                }

                var propertyName = ShaderUtil.GetPropertyName(shader, i);
                var displayName  = ShaderUtil.GetPropertyDescription(shader, i); // might be empty
                var modifiable   = !ShaderUtil.IsShaderPropertyNonModifiableTexureProperty(shader, i);

                Texture tex;
                if (!modifiable)
                {
                    tex = importer.GetNonModifiableTexture(propertyName);
                }
                else
                {
                    tex = importer.GetDefaultTexture(propertyName);
                }

                var temp = new TextureProp
                {
                    propertyName = propertyName,
                    texture      = tex,
                    dimension    = ShaderUtil.GetTexDim(shader, i),
                    displayName  = displayName,
                    modifiable   = modifiable
                };
                m_Properties.Add(temp);
            }
        }
        private void DrawTextureField(TextureProp prop)
        {
            var     oldTexture = prop.texture;
            Texture newTexture = null;

            EditorGUI.BeginChangeCheck();

            System.Type textureType = MaterialEditor.GetTextureTypeFromDimension(prop.dimension);

            if (textureType != null)
            {
                // Require at least two character in display name to prevent names like "-"
                var text = string.IsNullOrEmpty(prop.displayName) ? ObjectNames.NicifyVariableName(prop.propertyName) : prop.displayName;
                newTexture = EditorGUILayout.MiniThumbnailObjectField(GUIContent.Temp(text), oldTexture, textureType) as Texture;
            }

            if (EditorGUI.EndChangeCheck())
            {
                prop.texture = newTexture;
            }
        }