Unityでマウスをクリックした位置に描画するシェーダーを作ったのですが、
SetVectorArrayで位置配列を渡すと、1回目に渡した要素数を超えて描画されないのです。
SetVectorArrayで渡せる要素数は固定長なのでしょうか?変化させることはできますか?
private void Click() { Vector3 mousePos = CommonUtil.GetMousePositionBySceneName("test"); posList.Add(new Vector4(mousePos.x, mousePos.y, 100, 0)); material.SetVectorArray("_PosArray", posList); }
◆環境
Unity2020.3.0f1
Windows10
リファレンス(https://docs.unity3d.com/ja/current/ScriptReference/Material.SetVectorArray.html )によると、おっしゃる通り...
いったん、配列をブロックに加えると、配列の長さは変更できません。後で、同じプロパティーに初めのものより長い配列を設定しようとすると、配列の長さは最初の長さに制限され、それを超える分の要素は無視されます。初めのものより短い配列を設定しようとすると、新しい値は配列に割り当てられますが、余った配列の部分には古い値が残ります。
との記述がありますね。さらにシェーダー側でも、配列のサイズは固定長でなければならない制限があるはずです。マテリアルのシェーダーはどのようなものでしょうか?コードをご提示いただければ、何かそれを回避する方法...あるいは回避とまではいかなくても、何らかの妥協のしかたを探れるかもしれません。
ありがとうございます。ゲームの仕様的に100個は超えないと思いますので、最初に多めの数を渡す+要素数(=ループ数)も同時に渡すという手法で行こうと思います。回答欄に上記内容を書いていただければベストアンサーとさせていただきたいです。
回答1件
あなたの回答
tips
プレビュー