예제 #1
0
        static List <ConstGenSettings.Shader_> RetriveValues()
        {
            List <ConstGenSettings.Shader_> shaders_ = new List <ConstGenSettings.Shader_>();
            int duplicateCount = 1;

            // find shaders
            string[] shadersPath = AssetDatabase.FindAssets("t:shader");

            foreach (string path in shadersPath)
            {
                // ====================================================================
                // get shader and it's path
                string shaderPath = AssetDatabase.GUIDToAssetPath(path);
                Shader shader     = AssetDatabase.LoadAssetAtPath <Shader>(shaderPath);

                if (shader == null)
                {
                    continue;
                }
                // ====================================================================
                ConstGenSettings.Shader_ shader_       = new ConstGenSettings.Shader_();
                List <string>            propertyNames = new List <string>();

                // remove shader path from shader name
                int           index = shader.name.LastIndexOf('/');
                StringBuilder name_ = new StringBuilder();
                name_.Append(shader.name.Remove(0, index + 1));

                // remove any characters not okay for variable naming
                shader_.name = generator.MakeIdentifier(name_.ToString());
                // ====================================================================

                int propertiesCount = ShaderUtil.GetPropertyCount(shader);
                if (propertiesCount == 0)
                {
                    continue;
                }

                // loop through shader properties and cache it to propertyNames
                for (int i = 0; i < propertiesCount; i++)
                {
                    string propertyName = ShaderUtil.GetPropertyName(shader, i);
                    propertyNames.Add(propertyName);
                }

                // before adding the new shader to the list check first if it has conflicting names
                foreach (ConstGenSettings.Shader_ s in shaders_)
                {
                    if (s.name == shader_.name)
                    {
                        // add duplication identifier
                        shader_.name += "_D" + duplicateCount;
                        duplicateCount++;
                        break;
                    }
                }

                // remove any duplicate shader properties and store it in shaderData.properties
                shader_.properties = propertyNames.Distinct().ToList();
                shaders_.Add(shader_);
            }

            return(shaders_);
        }