0

実行時にマテリアルのパラメータを変更したい。このパラメーターは「Radio1」と呼ばれ、カスタムシェーダーで定義されます。マテリアルを使用しているすべてのオブジェクトに影響を与えるためにマテリアルに加えた変更が必要ですが、それは機能していません。どうすればいいですか?

マテリアルを使用してsharedMaterialを変更するオブジェクトの1つを取得し、マテリアルをロードして次のように変更しようとしました。

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

効果はまったく見られません。どうすればこれを達成できますか?

4

2 に答える 2

1

私はあなたのケースをテストしました。それはあなたが望むように働くことができるはずです。nullrefがない場合、私が想像できる唯一のエラーは、「Radio2」が間違った変数名であるということです。間違った名前を使用して変数を変更しようとしても、エラーは発生しません。あなたのテキストでは、変数を「ラジオ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 に答える