Beispiel #1
0
        internal Material GetMaterial(
            Material origin,
            int renderQueue,
            ShaderKeywords keywords)
        {
            CacheKey key;

            key.MaterialID  = origin.GetInstanceID();
            key.RenderQueue = renderQueue;
            key.Keywords    = keywords;

            Material material;

            if (this.cache.TryGetValue(key, out material))
            {
                if (material != null)
                {
                    return(material);
                }

                this.cache.Remove(key);
            }

            material           = new Material(origin);
            material.hideFlags = HideFlags.DontSave;
            if (renderQueue != -1)
            {
                material.renderQueue = (int)renderQueue;
            }

            foreach (var k in key.Keywords)
            {
                string keyword = ShaderKeywords.GetKeywordName(k);
                material.EnableKeyword(keyword);
#if UNITY_EDITOR
                material.name += "[" + keyword + "]";
#endif
            }

            this.cache.Add(key, material);

            return(material);
        }