在运行时修改材质

时间:2013-03-08 00:34:14

标签: unity3d

我想在运行时修改材质的参数。该参数被称为" Radio 1"并在自定义着色器中定义。我需要对材质进行更改以影响使用它的所有对象,并且它不起作用。 我怎么能这样做?

我尝试过使用该材料的其中一个对象并修改sharedMaterial,并尝试加载材料并按照以下方式对其进行修改:

var mater = Resources.Load("BGRingMat") as Material;
mater.SetFloat("Radio2", bgRingMaterialRadio2);

我看不到任何影响。 我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

我刚试过你的案子。它应该能够按照你的意愿工作。如果你没有得到任何nullrefs,我能想象的唯一错误是“Radio2”是一个错误的变量名。如果您尝试使用错误的名称修改变量,则不会出现任何错误。在您的文本中,您将变量称为“Radio 1”。

答案 1 :(得分:0)

全局修改此材质的所有实例的着色器值:

Material mat = Resources.Load("BGRingMat") as Material;
mat.SetFloat( "Radio2", bgRingMaterialRadio2);

或修改1个对象:

renderer.material = Resources.Load("BGRingMat") as Material;
renderer.material.SetFloat( "Radio2", bgRingMaterialRadio2);

请注意,如果您先直接修改对象的材质,然后尝试使用共享材质,则不会发生任何事情:

Material mat = Resources.Load("BGRingMat") as Material;

// Sets Radio2 to bgRingMaterialRadio2
renderer.material.SetFloat( "Radio2", bgRingMaterialRadio2);

// Doesn't do anything to the current object as this object now has its own copy.
mat.SetFloat( "Radio2", 0.0f);