スクリプトからコンポーネントを取得する方法

ここでは、ゲームオブジェクトにアタッチされているコンポーネントをC#スクリプトから取得する方法について説明します。


※この記事で使用しているUnityのバージョン:Unity2019.1

コンポーネントを1つだけ取得する方法

C#スクリプトでコンポーネントを1つだけ取得するには次の2つの方法があります。

  • GetComponentでそのゲームオブジェクトのコンポーネントを1つ取得する
  • GetComponentInChildrenで子のゲームオブジェクトのコンポーネントを検索して1つ取得する
  • GetComponentInParentで親のゲームオブジェクトのコンポーネントを検索して1つ取得する

GetComponent

GetComponentを使えば指定したゲームオブジェクトにアタッチされている特定のコンポーネントを1つ取得することができます。

例えば、スクリプトがアタッチされているのと同じゲームオブジェクトにアタッチされているリジッドボディコンポーネントを取得する場合は次のように書きます。

Rigidbody rigidBody = GetComponent<Rigidbody>();

GetComponentInChildren

GetComponentInChildrenは、あるゲームオブジェクトの子のゲームオブジェクトにアタッチされているコンポーネントを1つ取得するメソッドです。

Rigidbody rigidBody = GetComponentInChildren<Rigidbody>();

GetComponentInParent

GetComponentInParentは、先述のGetComponentInChildrenの逆で親のゲームオブジェクトのコンポーネントを1つ取得します。

Rigidbody rigidBody = GetComponentInParent<Rigidbody>();

複数のコンポーネントをまとめて取得する方法

次に複数のコンポーネントをまとめて取得するには、先ほどの3つのメソッドとほぼ同じ使い方ができるメソッドを使います。

  • GetComponentsでそのゲームオブジェクトのコンポーネントをまとめて取得する
  • GetComponentsInChildrenで子のゲームオブジェクトのコンポーネントを検索してまとめて取得する
  • GetComponentsInParentで親のゲームオブジェクトのコンポーネントを検索してまとめて取得する

1つだけ取得する場合との違いは、戻り値が配列になることだけです。

コンポーネントを取得するときの注意点

最後にコンポーネントを取得するときには1つ注意点があります。それはコンポーネントの取得処理は重い処理だということです。

なのでゲームオブジェクトの検索のときと同様に、Updateメソッド内など頻繁に呼ばれる場所にはこの処理を書かないようにしましょう。