Unity /如何通过c#脚本添加着色器到材质?

我已经发现了一些东西 – 但是那些东西看起来并不是我所需要的。 (也许是过时的function?)

https://docs.unity3d.com/ScriptReference/Material-shader.html

在这里,你似乎可以给渲染器添加着色器

using UnityEngine; using System.Collections; public class ExampleClass : MonoBehaviour { public Shader shader1; public Shader shader2; public Renderer rend; void Start() { rend = GetComponent<Renderer>(); shader1 = Shader.Find("Diffuse"); shader2 = Shader.Find("Transparent/Diffuse"); } void Update() { if (Input.GetButtonDown("Jump")) if (rend.material.shader == shader1) rend.material.shader = shader2; else rend.material.shader = shader1; } } 

好 – 我没有渲染器。 我只有一个材料。

并没有“material.setShader”,只有一个material.setTexture“

sooo任何人都可以解决这个神秘的如何通过脚本添加着色器的材料?

如果你已经有了对材质和着色器的引用,那么你只需要这样做: myMaterial.shader = myShader; 没有比这更多的东西了。

Unity Material API表示shader属性是public所以你可以使用=而不是find一些“set”方法。 对于材质上的纹理有一个明确的“设置”和“获取”function,因为它们可以有多个,所以它们被识别为一个名称或ID。

在渲染器的示例中,它只是从渲染器获取材质,并执行上面提到的相同的事情。 这个代码…

 rend.material.shader = myShader; 

与此代码具有相同的结果…

 Material myMaterial = rend.material; myMaterial.shader = myShader;