実現したいこと
Unityのエディタ拡張でマテリアルが2つ入った配列を作りたい
躓いたポイント
Index was outside the bounds of the array.エラーが出る。
ただ状況的に変数宣言が間違ってるとも考えづらく、どう修正したら良いものか…
(エディタ拡張実装上の制限があるので以下のように少し遠回りな実装を試みています…)
環境
Unity 2019.4.31f1(VRChat関連なのでアップデートは出来ないです…
VisualStudio 2022 17.1.0
実際のコード
C#
1public Material Mat1; //Inspectorでマテリアルを設定できる 2public Material Mat2; //上に同じく 3 4public Material[] Arraymat = new Material[2];
と宣言した上で
Mat1、Mat2にOnGUI()を通じてProjectのマテリアルを指定し
C#
1Arraymat[0] = Mat1; 2Arraymat[1] = Mat2;
と代入を試みました。
ところがIndexOutofRangeになるのでデバッグログを仕込み、試行錯誤した結果以下のようになりました。
C#
1 Debug.Log("AAAAa");//このログは出る 2 3 Arraymat[0] = Mat1; 4 5 Debug.Log("hogehoge");//このログは出る 6 7 Arraymat[1] = Mat2;//おそらくここでOutofRange 8 9 Debug.Log("BBBBb");//このログはでない
このコードで配列の宣言時、Arraymat[50]など余裕を持たせたりもしたのですが変わらず…
そしてVisualStudioのIntelliSenseではエラー・警告は出ていません。
と、なにか仕様の勘違いをしているのかもしれませんが私の力ではどうにもならない状況です…どうかお助けください…!
ちなみに
C#
1 Debug.Log("AAAAa");//このログは出る 2 3 Arraymat[0] = Mat1; 4 5 Debug.Log("hogehoge");//このログは出る 6 7 Debug.Log(Arraymat[0]);//このログは出る上に、しっかり代入できていることが確認できた 8 9 Arraymat[1] = Mat2;//おそらくここで… 10 11 Debug.Log("BBBBb");//このログは出ない
のような結果も得られました。
全体のやりたいこととしては
「指定した複数個のマテリアルからランダムに一つを選んでMeshRendererに設定する」エディタ拡張なので、同じことができる別のアプローチでも大歓迎です!
駄文で申し訳ないのですがよろしくお願いします…!
追記・VisualStudioでの変数内容
Debug.Log("hogehoge")をブレークポイントにし、Arraymatの中身を見た所
Arraymat[]
1unityEngine.Material[1] 2└[0] TestMaterial(UnityEngine.Material)
となっていました。
= new Material[2] としたのがなかったことになってるのでしょうか…?
回答2件
あなたの回答
tips
プレビュー