0

我想在运行时修改材质的参数。该参数称为“Radio 1”,并在自定义着色器中定义。我需要对材质进行更改以影响所有正在使用它的对象,但这是行不通的。我该怎么做?

我尝试获取使用该材料的对象之一并修改 sharedMaterial,还尝试加载该材料并像这样修改它:

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

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

4

2 回答 2

1

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

于 2013-03-08T08:59:12.817 回答
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);
于 2013-03-08T04:16:17.517 回答