我想在运行时修改材质的参数。该参数被称为" Radio 1"并在自定义着色器中定义。我需要对材质进行更改以影响使用它的所有对象,并且它不起作用。 我怎么能这样做?
我尝试过使用该材料的其中一个对象并修改sharedMaterial,并尝试加载材料并按照以下方式对其进行修改:
var mater = Resources.Load("BGRingMat") as Material;
mater.SetFloat("Radio2", bgRingMaterialRadio2);
我看不到任何影响。 我怎样才能做到这一点?
答案 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);