C# 添加新着色器时,如何保持角色的主纹理?

C# 添加新着色器时,如何保持角色的主纹理?,c#,unity3d,shader,C#,Unity3d,Shader,我创建了一个pbr着色器图。问题是,当我更改材质以使用新着色器时,角色纹理也在更改。有没有办法使用新着色器保持原始纹理 这是原始材质的屏幕截图,与具有原始着色器的角色一起使用: 这是原始纹理: 这是附加脚本的角色网格检查器设置: 这是检查器中的新着色器设置: 以下是脚本: using System.Collections; using System.Collections.Generic; using UnityEngine; public class NewBehaviourScri

我创建了一个pbr着色器图。问题是,当我更改材质以使用新着色器时,角色纹理也在更改。有没有办法使用新着色器保持原始纹理

这是原始材质的屏幕截图,与具有原始着色器的角色一起使用:

这是原始纹理:

这是附加脚本的角色网格检查器设置:

这是检查器中的新着色器设置:

以下是脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    public Shader _shader;

    // Start is called before the first frame update
    void Start()
    {
        Store();
    }

    // Update is called once per frame
    void Update()
    {

    }

    private void Store()
    {
        Texture tex = gameObject.GetComponent<Renderer>().material.GetTexture("_MainTex");
        gameObject.GetComponent<Renderer>().material.shader = _shader;
        gameObject.GetComponent<Renderer>().material.SetTexture("_MainTex", tex);
    }
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类NewBehaviourScript:MonoBehavior
{
公共着色器_着色器;
//在第一帧更新之前调用Start
void Start()
{
Store();
}
//每帧调用一次更新
无效更新()
{
}
专用存储空间()
{
纹理tex=gameObject.GetComponent().material.GetTexture(“_MainTex”);
gameObject.GetComponent().material.shader=\u着色器;
gameObject.GetComponent().material.SetTexture(“\u MainTex”,tex);
}
}
现在运行游戏时,它会更改为新的着色器,但不会保留原始纹理:

我试图将脚本中的行(Store函数的最后一行)更改为:但更改不大

gameObject.GetComponent<Renderer>().material.SetTexture("vanguard_diffuse", tex);
gameObject.GetComponent().material.SetTexture(“vanguard_diffuse”,tex);
这条发光线很好这是新着色器应该做的效果,但我希望它能像第一个屏幕截图那样在原始纹理上做

新的着色器使用pbr和hdr以及其他东西使角色慢慢消失,并在边缘上再次显示发光的颜色。我不知道如何在具有原始纹理的角色上使用它

我刚刚做了这个教程,它的工作很好,但我希望它现在工作的原始纹理的角色


您需要使用“采样2d”节点(我想它被称为“采样”)从着色器图形中的纹理中采样。然后需要将这些节点的输出链接到输出节点的反照率和法线通道。如果需要对多个纹理进行采样,或者希望将其他着色器内容添加到反照率中,则可以将这两个材质添加到一起