unity给子物体添加Shader

Posted 叫我张先生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity给子物体添加Shader相关的知识,希望对你有一定的参考价值。

分享两个自制Shader:http://pan.baidu.com/s/1nuRcF2L

 

Shader存放路径:\Assets\Resources\Shader\

定义Shader类型:

public enum EnumFbxType
{
    Default,
    TouMing,
    GaoLiang,
}

加载指定Shader:

    private static Shader myTouMing = Shader.Find("My/TouMing");
    private static Shader myDiffuse = Shader.Find("My/Diffuse");

设置物体的Shader:

/// <summary>
    /// 设置模型材质
    /// </summary>
    /// <param name="_obj">模型</param>
    /// <param name="_fbxType">材质类型</param>
    public static void SetObjFbxShader(GameObject _obj, EnumFbxType _fbxType)
    {
        if (_obj == null) return;
        Renderer r = _obj.GetComponent<Renderer>();
        if (r == null) return;
        Material[] mater = r.materials;
        switch (_fbxType)
        {
            case EnumFbxType.Default:
                foreach (Material m in mater)
                {
                    if (m.color.a == 1 || m.color.a == 0.123f)
                    {
                        m.shader = myDiffuse;
                        m.SetFloat("_Glossiness", 0.3f);
                        m.SetFloat("_Metallic", 0);
                        m.SetColor("_Emission", Color.black);
                    }
                    else
                    {
                        m.shader = myTouMing;
                        m.SetColor("_Emission", Color.black);
                    }
                }
                break;
            case EnumFbxType.TouMing:
                foreach (Material m in mater)
                {
                    m.shader = myTouMing;
                    m.SetColor("_Emission", Color.black);
                    if (m.color.a == 1)
                    {
                        Color color = m.color;
                        color.a = 0.123f;
                        m.color = color;
                    }
                }
                break;
            case EnumFbxType.GaoLiang:
                foreach (Material m in mater)
                {
                    m.shader = myDiffuse;
                    m.SetFloat("_Glossiness", 1);
                    m.SetFloat("_Metallic", 0.2f);
                    m.SetColor("_Emission", Color.red);
                }
                break;
        }
    }

 

以上是关于unity给子物体添加Shader的主要内容,如果未能解决你的问题,请参考以下文章

小功能⭐️Unity2018 Shader Graph——全息影像物体消融

小功能⭐️Unity2018 Shader Graph——全息影像物体消融

小功能⭐️Unity2018 Shader Graph——全息影像物体消融

unity shader 如何获取物体的本地坐标

Unity Shader 光照模型(基础公式和代码实现)

Unity Shader-渲染队列,ZTest,ZWrite,Early-Z(转)