私の作ってるゲームのキャラクターオブジェクトは複数のスプライトで構成されています。
スプライトの色を変える際にマテリアルを登録してその色を変える必要が出ました。
次に挙げるのツリーが目的のオブジェクトです。
スプライトは Player の子オブジェクトになっており、これにアクセスできるようにします。
スクリプトは大雑把ですが次のようになりました。
手順を解説していきます
- マテリアルを作成してすべてのスプライトの SpriteRenderer の material に設定します。
-
次に、スクリプトです。
Color damageColor;
Transform children;
Color型で変えたい色の変数を、Transform 型で子オブジェクトへ参照する変数を定義します。
-
main() 関数では
children = this.gameObject.GetComponentInChildren();
これで子オブジェクトを取得します。(ボーンも含まれます)
なお、参照順序はヒエラルキー上のツリーで上から順です。
(「右肩」が0番、「右手」なら1番です。) -
次に、SetMaterialColor(Color _color) 関数では
obj.GetComponent().material.color = _color;
これで各マテリアルの色を指定します。
また、私の場合ボーン情報にはマテリアルを適用していないので、
if( obj.name == "bone_1") return;
をループ内に記述してボーン情報になったら foreach を抜けるようにしないと実行中にエラーが出ます。 -
最後に、Damage() 関数で
SetMaterialColor( damageColor) 関数 を呼び出します。
実行結果は以下のようになります。
本項は、次のサイトを参考に致しました。ありがとうございました!
【Unity】子オブジェクトを取得する4つの方法 : daichi_gamedev 様
https://zenn.dev/daichi_gamedev/articles/b901ca3a1b4391