こんにちは、ともくんのゲーム作り部屋にようこそ!
このページでは、
「UnityのGetComponentってなに?」
「GetComponentを使うとどんなことができるの?」
というお悩みの方に向けた内容となっています。
UnityのGetComponentは、オブジェクトに紐づいているコンポーネントを取得することができるメソッドです。
このGetComponentを使うことで、コンポーネントの中にある変数やメソッドを呼び出すことができ、スクリプト上からコンポーネントの機能を使うことができるようになります。
例えば、
といったコンポーネントに関する処理を行う場合に、GetComponentを使うことでできるようになります。
そこで、このページでは、UnityのGetComponentがどういったものなのか、特徴や使い方についてまとめていきます。
GetComponentとは?
ここでは、GetComponentがどういうメソッドなのかについて紹介していきます。
コンポーネントを取得できるメソッド
GetComponentとは、オブジェクトに紐づいているコンポーネントを取得できるメソッドになっています。
そもそもコンポーネントとは、オブジェクトに対して様々な機能を追加できる装備のようなもので、オブジェクトを選択すると紐づいているコンポーネントがインスペクターウィンドウに表示されます。

例えば、
- オブジェクトの座標や回転を管理するTransform
- オブジェクトの物理的挙動を表すRigidbody
- オブジェクトの当たり判定を管理するCollider
などのコンポーネントが、Unityでよく使われています。
GetComponentは、これらのオブジェクトに紐づいているコンポーネントを取得することができるメソッドになっています。
なお、オブジェクトにアタッチされているスクリプトなども、このGetComponentを使うことで取得することができます。
スクリプトからコンポーネント機能を使用・変更できる
GetComponentによってコンポーネントを取得することで、そのコンポーネントの中にある機能を使ったり、データを取得するということができるようになります。
もう少し具体的に言うと、コンポーネントの中には、それぞれ変数やメソッドが定義されていて、これらを呼び出すことでオブジェクトに処理を行うことができます。
例えば、
- Rigidbodyの中にあるAddForceメソッドで力を加えたい
- Transformの中にあるposition変数で座標を変更したい
といった処理をオブジェクトに行うことができます。
そして、このコンポーネントの中の変数やメソッドを呼び出すためには、GetComponentでそのコンポーネントを取得してから呼び出す必要があります。
そのため、コンポーネントの機能を使うためには、このGetComponentメソッドが非常に重要になってきます。
GetComponentの使い方
ここからは、GetComponentの使い方について紹介していきます。
GetComponentの後ろでコンポーネントを指定する
GetComponentを使う際は、後ろに<>内でコンポーネントの種類を指定することで取得することができます。
GetComponent<コンポーネント名>()
例えば、Rigidbodyコンポーネントを取得する場合は、
GetComponent<Rigidbody>()
と記述してあげます。
また、GetComponentメソッドは負荷が大きく何度も処理が行われないように、
using UnityEngine;
public class Test : MonoBehaviour
{
Rigidbody rb; // Rigidbody型の変数を宣言
void Start()
{
rb = GetComponent<Rigidbody>(); // Rigidbodyコンポーネントを取得
}
}
上記のように、5行目でRigidbody型の変数rb(変数名は何でもよい)を作り、Startメソッド内でその変数の中にコンポーネントを取得して入れる処理を行うことで、その後はGetComponentを使わず変数のrbだけでコンポーネントの機能を使うことができるようになります。
なお、座標の位置や向きなどを管理しているTransformコンポーネントだけは、このGetComponentを使う必要がありません。
なぜなら、
Transform transform;
transform = GetComponent<Transform>();
という処理がすでにUnity側でされているため、変数のtransformと書くだけでコンポーネントを使うことができるようになっています。
コンポーネントの中の変数やメソッドを呼び出す
GetComponentでコンポーネントを取得することができたら、その中にある変数やメソッドを呼び出すことができます。
変数やメソッドを呼び出す場合は、
GetComponent<コンポーネント名>().変数
GetComponent<コンポーネント名>().メソッド()
といった形で記述することになります。
例えば、先ほどのRigidbodyコンポーネントを変数のrbで取得して、AddForceメソッドでスペースキーを押したら力を加えることができるようにしたい場合、
using UnityEngine;
public class Test : MonoBehaviour
{
Rigidbody rb; // Rigidbody型の変数を宣言
void Start()
{
rb = GetComponent<Rigidbody>(); // Rigidbodyコンポーネントを取得
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
rb.AddForce(5.0f, 5.0f, 0); // AddForceメソッドを呼び出せる
}
}
}
と、if文の中の16行目でrigidbody.AddForce()と書いてあげることで、Rigidbodyコンポーネントの中に定義されているAddForceメソッドを呼び出して使うことができます。
他のオブジェクトのコンポーネントも取得できる
ここまでは、スクリプトにアタッチしているオブジェクトのコンポーネントを取得する方法を紹介していきましたが、GetComponentはアタッチしていないオブジェクトのコンポーネントを取得することもできます。
スクリプトにアタッチしていないオブジェクトのコンポーネントを取得したい場合は、GetComponentの前でどのオブジェクトなのかをGameObject型で指定する必要があります。
GameObject.GetComponent<コンポーネント名>()
オブジェクトを取得する方法はいくつかありますが、ここではインスペクターウィンドウから指定してみます。
using UnityEngine;
public class Test : MonoBehaviour
{
public GameObject player; // GameObject型の変数をpublicで宣言
Rigidbody rb; // Rigidbody型の変数を宣言
void Start()
{
rb = player.GetComponent<Rigidbody>(); // playerのRigidbodyコンポーネントを取得
Debug.Log(rb.mass);
}
}
5行目でpublicのアクセス修飾子を付けてGameObject型の変数を宣言して、インスペクターウィンドウからこの変数に対して、コンポーネントを取得したいオブジェクトをドラッグ&ドロップで指定してあげます。

これでオブジェクトを取得することができたので、10行目のように変数playerの後ろにGetComponentを付けて、そのオブジェクトに紐づくコンポーネントを取得することができます。
ここでは、Rigidbodyコンポーネントの中でオブジェクトの重さを管理している変数massを取得してコンソールウィンドウに表示させています。

他にも、コンポーネント名の部分にスクリプト名を入れてあげることで、そのオブジェクトで独自に設定した変数のデータを変えたりすることができるようになります。
まとめ
このページでは、Unityで使うことができるGetComponentメソッドについて、どんな特徴があるのか、仕様や使い方についてまとめていきましたが、いかがでしたでしょうか?
GetComponentメソッドとは、コンポーネントを取得することができるメソッドで、コンポーネントの機能を使う上で重要なメソッドになってきます。
GetComponentを使う際は、
GetComponent<コンポーネント名>()
と書いてあげることで、そのコンポーネントを取得することができます。
ただし、GetComponentの処理は負荷が大きいため、何度も処理が行われないように、Startメソッド内などで1度だけ取得してあげるといった使い方をしましょう。
最後までお読みいただきまして、ありがとうございました!
コメント