Пример #1
0
        public static void SetLightMap(GameObject obj, int index, Vector4 offset)
        {
            List <Component> renderers = getComponentByType(obj, typeof(Renderer)) as List <Component>;

            if (renderers != null && (renderers.Count > 0))
            {
                for (int i = 0; i < renderers.Count; i++)
                {
                    Renderer renderer = renderers[i] as Renderer;
                    if (renderer != null)
                    {
                        renderer.lightmapIndex       = index;
                        renderer.lightmapScaleOffset = offset;
                        for (var j = 0; j < renderer.materials.Length; j++)
                        {
                            renderer.materials[j].shader = FuncUtil.FindShader(renderer.materials[j].shader.name);
                        }
                    }
                }
            }
            else
            {
                Terrain t = obj.GetComponent <Terrain>();
                if (t != null)
                {
                    t.lightmapIndex       = index;
                    t.lightmapScaleOffset = offset;
                }
            }
        }
Пример #2
0
        public static void ResetShader(GameObject obj)
        {
            List <Component> renderers = getComponentByType(obj, typeof(Renderer));

            if (renderers != null && (renderers.Count > 0))
            {
                for (int i = 0; i < renderers.Count; i++)
                {
                    Renderer renderer = renderers[i] as Renderer;
                    for (var j = 0; j < renderer.materials.Length; j++)
                    {
                        renderer.materials[j].shader = FuncUtil.FindShader(renderer.materials[j].shader.name);
                    }
                }
            }
        }
Пример #3
0
    /// <summary>
    /// Create an appropriate material for the draw call.
    /// </summary>

    void CreateMaterial()
    {
        mTextureClip  = false;
        mLegacyShader = false;
        mClipCount    = panel.clipCount;

        string shaderName = (mShader != null) ? mShader.name :
                            ((mMaterial != null) ? mMaterial.shader.name : "Unlit/Transparent Colored");

        // Figure out the normal shader's name
        shaderName = shaderName.Replace("GUI/Text Shader", "Unlit/Text");

        if (shaderName.Length > 2)
        {
            if (shaderName[shaderName.Length - 2] == ' ')
            {
                int index = shaderName[shaderName.Length - 1];
                if (index > '0' && index <= '9')
                {
                    shaderName = shaderName.Substring(0, shaderName.Length - 2);
                }
            }
        }

        if (shaderName.StartsWith("Hidden/"))
        {
            shaderName = shaderName.Substring(7);
        }

        // Legacy functionality
        const string soft = " (SoftClip)";

        shaderName = shaderName.Replace(soft, "");

        const string textureClip = " (TextureClip)";

        shaderName = shaderName.Replace(textureClip, "");

        if (panel.clipping == Clipping.TextureMask)
        {
            mTextureClip = true;
            shader       = FuncUtil.FindShader("Hidden/" + shaderName + textureClip);
        }
        else if (mClipCount != 0)
        {
            shader = FuncUtil.FindShader("Hidden/" + shaderName + " " + mClipCount);
            if (shader == null)
            {
                shader = FuncUtil.FindShader(shaderName + " " + mClipCount);
            }

            // Legacy functionality
            if (shader == null && mClipCount == 1)
            {
                mLegacyShader = true;
                shader        = FuncUtil.FindShader(shaderName + soft);
            }
        }
        else
        {
            shader = FuncUtil.FindShader(shaderName);
        }

        // Always fallback to the default shader
        if (shader == null)
        {
            shader = FuncUtil.FindShader("Unlit/Transparent Colored");
        }

        if (mMaterial != null)
        {
            mDynamicMat           = new Material(mMaterial);
            mDynamicMat.name      = "[NGUI] " + mMaterial.name;
            mDynamicMat.hideFlags = HideFlags.DontSave | HideFlags.NotEditable;
            mDynamicMat.CopyPropertiesFromMaterial(mMaterial);
#if !UNITY_FLASH
            string[] keywords = mMaterial.shaderKeywords;
            for (int i = 0; i < keywords.Length; ++i)
            {
                mDynamicMat.EnableKeyword(keywords[i]);
            }
#endif
            // If there is a valid shader, assign it to the custom material
            if (shader != null)
            {
                mDynamicMat.shader = shader;
            }
            else if (mClipCount != 0)
            {
                Debug.LogError(shaderName + " shader doesn't have a clipped shader version for " + mClipCount + " clip regions");
            }
        }
        else
        {
            mDynamicMat           = new Material(shader);
            mDynamicMat.name      = "[NGUI] " + shader.name;
            mDynamicMat.hideFlags = HideFlags.DontSave | HideFlags.NotEditable;
        }
    }