Unityのコンポーネントを一括で取得する

記事内に広告が含まれています。

今回は自身に設定されているコンポーネントを全て取得したり、自身の階層からコンポーネントを全て取得する方法を作成してみます。

特定のコンポーネントや自身の親や子の要素から1つのコンポーネントを取得する方法は

Unityでゲームオブジェクト、コンポーネントを取得する方法
Unityのスクリプトでゲームオブジェクト、コンポーネントを階層を辿って取得、タグを使って取得、コンポーネントの型で取得等、色々試してみます。

でやり方を記載していますのでそちらをご覧ください。

スポンサーリンク

自身に設定されているコンポーネントを全て取得するGetComponents

まずは自身のゲームオブジェクトに設定されているコンポーネントを全て取得する事が出来るGetComponentsを使ってみます。

例えば一つのゲームオブジェクトに複数のコライダが設定されている時に全てのコライダを取得する事が出来ます。

ひとつサンプルを作成してみます。

モデルのEthanを配置する

↑のようにStandard Assets→Characters→ThirdPersonCharacter→Models→Ethanをヒエラルキー上にドラッグ&ドロップします。

BoxColliderとSphereColliderを取りつける

↑のようにBoxColliderとSphereColliderを取りつけます。

サイズを調整したコライダ

↑はコライダのサイズを調整した状態です。

今回はコンポーネントを取得するサンプルなので細かい事は忘れましょう・・・・。

GetComponentsTestスクリプトを作成し、Ethanに設定します。

コライダはBoxColliderとSphereColliderを取りつけていますので親クラスであるCollider型の配列を宣言し取得したコンポーネントをそこに入れるようにします。

GetComponentsで自身に設定されているColliderコンポーネントを取得しcolsに入れます。

最後に取得したコライダのゲームオブジェクトの名前を出力してます。

それでは実行してみましょう。

GetComponentsのテスト

↑のようにBoxColliderとSphereColliderが取得出来る事を確認出来ました(上ではEthanとなってますがゲームオブジェクト名がEthan(1)ならばEthan(1)が表示されるはずです)。

自身の子要素に設定されているコンポーネントを全て取得するGetComponentsInChildren

さきほどのGetComponentsでは自身のゲームオブジェクトに複数のコンポーネントが設定されていた場合取得出来ますが、

子要素に設定されているコンポーネントは取得出来ませんでした。

そこで自身のゲームオブジェクトを含む子要素に設定されているコンポーネントも取得出来るGetComponentsInChildrenを使用してみましょう。

ボーンの子要素に当たり判定コライダを設定

↑のようにEthanのボーンの子要素に右クリック→Create Emptyを選択しそれぞれの名前を設定します。

それぞれにはコライダを設定します。

各部位にコライダを設定する

左足の部分は↑のようにコライダを設定しています。

各部位にコライダが設定されたモデル

↑がそれぞれの部位にコライダを設定した状態です。

さきほどのスクリプトを少し変更します。

GetComponentsをGetComponentsInChildrenに変更します。

これをEthanに設定し実行してみます。

取得したコライダのゲームオブジェクトの名前を表示

↑のように取得したコライダのゲームオブジェクトの名前が表示されました。

GetComponentsInChildrenを使うと自身に設定されているコンポーネントを含む子要素全てのコンポーネントが取得出来る事がわかりました。

自身の親要素に設定されているコンポーネントを全て取得するGetComponentsInParent

自身の親要素に設定されているコンポーネントを全て取得するにはGetComponentsInParentを使います。

使い方はGetComponentsInChildrenと同じなので割愛します。

終わりに

一括して同種のコンポーネントを取得したい事もあると思います。

例えばダメージを受けるコライダを体の部位毎に作成しているけど無敵になるアイテムを取ったらダメージを受けるコライダを全て無効にするといった場面です。

そういう時はキャラクターを動かす当たり判定のコライダも取得されてしまいますが、タグを設定し振り分ければダメージを受けるコライダだけ無効にする事が可能です。

一つ一つのコンポーネントを取得するのが面倒な時に今回のように一括でコンポーネントが取得出来ると便利ですね(^_^)v

タイトルとURLをコピーしました