今天发现了一个问题,就是通过代码来为Material设置法线贴图,但是设置后没有效果,需要在场景中来回切换一下才可以.如图所示:

这是我Test里面的代码:

    [MenuItem("Test/Test")]
    public static void Test()
    {
        Texture texture = Resources.Load<Texture>("BMW.fbm/luntai_Low_Luntai_Normal");
        Material material = Resources.Load<Material>("Materials/luntai_Low_Luntai_AlbedoTransparency");
        material.SetTexture("_BumpMap", texture);
    }

没什么特别的,就是将Texture和Material加载出来并且将Texture设置为Material的法线贴图!不管怎么刷新AssetDatabase.Refresh或者导入AssetsSetting.ImportAsset都没用,最后在官网找到解决方案!

需要使用EnableKeyword方法来为Standard Shader启用正确的关键字!例如对于设置法线贴图而言只需要添加一行代码即可:

    [MenuItem("Test/Test")]
    public static void Test()
    {
        Texture texture = Resources.Load<Texture>("BMW.fbm/luntai_Low_Luntai_Normal");
        Material material = Resources.Load<Material>("Materials/luntai_Low_Luntai_AlbedoTransparency");
        material.SetTexture("_BumpMap", texture);
        material.EnableKeyword("_NORMALMAP");
    }

关于该问题的更多详细信息,请查看官网文档:https://docs.unity3d.com/Manual/MaterialsAccessingViaScript.html


只要你成为一个废物,就没人能利用你