初心者必見!現場レベルの「ゲーム制作講座PDF」を無料プレゼント中!▶

Unity GetComponentの使い方 | コンポーネント取得

Unity 基礎操作・設定

「同じオブジェクトに付いているRigidbodyを、スクリプトから動かしたい」

GameObjectには複数のコンポーネントが付いています。
別のコンポーネントを操作するには、GetComponentで取得するのが基本です。
Collider、Rigidbody、自作スクリプトなど、あらゆる処理の入口になります。

この記事では、GetComponentの基本、TryGetComponent、子・親オブジェクトからの取得、nullエラー対策、よくあるつまずきまで整理します。

  • GetComponentを書いたのにNullReferenceExceptionが出る…
  • 子オブジェクトのスクリプトを、親から取得したいが方法が分からない。
  • 毎回GetComponentを呼ぶべきか、変数に保存すべきか迷う。

✨ この記事でわかること

  • GetComponentの基本構文
  • TryGetComponentで安全に取得する方法
  • GetComponentInChildren・InParentの違い
  • 取得結果を変数にキャッシュするコツ
  • nullが返る原因と対処
  • 初心者でも理解できる解説

\プログラミング未経験でも大丈夫!まずは1本作り切ろう/

初心者が最初に選ぶならコレ

Unity ノンフィールドRPG
+スレスパ風JRPG講座

★★★★★ (Unity6対応)

Unity6対応・スマホ化対応の最新カリキュラム。「何から始めればいいかわからない」という初心者でも、ステップごとに手を動かすだけでRPGが完成します。

講座を見てみる \ゼロからでもスマホ対応RPGが作れる!/

憧れのアクションゲームに挑戦

Unity 2Dアクションゲーム
の作り方講座(ロックマン風)

★★★★★ (スマホ化・広告実装)

初心者でもロックマン風の横スクロールACTが作れる講座。7ステージ+ラスボスという本格構成で、スマホ化・広告実装まで対応。「自分のゲームをリリースしたい」夢を叶えます。

講座を見てみる \初心者でも本格ACTが完成する!/

3Dゲーム開発の入口はここ

ゼルダ風3Dアクションゲーム
の作り方講座

★★★★★ (スマホ化対応)

「3Dゲームって難しそう…」と感じている初心者向けの講座。全16回でゼルダ風3Dアクションがスマホ対応で作れるようになります。3D開発の基礎がしっかり身につきます。

講座を見てみる \初心者でも全16回で3Dゲームが完成!/

GetComponentとは|付いている部品を取り出す

Unityでは、見た目・物理・音・ロジックなどがコンポーネント単位でGameObjectに付いています。
GetComponent<T>は、同じGameObjectに付いている型Tのコンポーネントを1つ取り出すメソッドです。

Rigidbody rb = GetComponent<Rigidbody>;
rb.velocity = transform.forward * 5f;

自作スクリプトも同様に取得できます。

PlayerHealth health = GetComponent<PlayerHealth>;
health.TakeDamage(10);

コンポーネントが付いていない場合はnullが返ります。
そのまま操作するとNullReferenceExceptionになるため、存在確認が重要です。

TryGetComponentで安全に取得

Unity 2019.2以降では、TryGetComponentが推奨されることが多いです。
取得できたかどうかをboolで返し、out引数に結果を渡します。

if (TryGetComponent<Rigidbody>(out Rigidbody rb))
{
  rb.AddForce(Vector3.up * 5f);
}

nullチェックと取得を1行にまとめられるのが利点です。
条件分岐が読みやすく、エラーも減らせます。

管理人
管理人

「付いているか分からない部品」を触るときは、TryGetComponentが安心です。
Rigidbodyの有無で2Dと3Dが混ざっているプロジェクトでも活躍しますよ。

GetComponentInChildrenとInParent

同じオブジェクトだけでなく、階層の上下から探すメソッドもあります。

メソッド 検索範囲
GetComponentInChildren<T> 自分と子オブジェクト(深い階層も含む)から最初の1件
GetComponentInParent<T> 自分と親オブジェクトをたどって最初の1件

キャラの子に付いた「武器」から、親のPlayerControllerを探す例です。

PlayerController controller = GetComponentInParent<PlayerController>;

親オブジェクトの子にあるAnimatorを探す例です。

Animator anim = GetComponentInChildren<Animator>;

非アクティブな子も含めて探すには、includeInactive: trueを指定するオーバーロードがあります。
UIの初期非表示パーツを扱うときに使います。

キャッシュして毎回呼ばない

GetComponentは比較的軽いですが、毎フレーム同じ取得を繰り返す必要はありません。
AwakeやStartで1回取得し、フィールドに保存するのが定番です。

Rigidbody rb;

void Awake
{
  rb = GetComponent<Rigidbody>;
}

void Update
{
  if (rb == null) return;
  // rb を使った処理
}
GetComponent実装の流れ
  • STEP1
    必要なコンポーネントを確認

    Inspectorで、対象GameObjectにRigidbody等が付いているか見ます。
  • STEP2
    Awakeで取得してキャッシュ

    フィールドに保存し、Updateではキャッシュを使います。
  • STEP3
    TryGetComponentで存在確認

    付いていない可能性がある場合はifで囲みます。
  • STEP4
    子や親ならInChildren/InParent

    階層をまたぐ場合は適切なメソッドを選びます。

他オブジェクトのコンポーネントを取得

別のGameObjectのコンポーネントを触るときは、そのオブジェクト経由でGetComponentを呼びます。

void OnTriggerEnter(Collider other)
{
  if (other.TryGetComponent<EnemyHealth>(out EnemyHealth enemy))
  {
    enemy.TakeDamage(1);
  }
}

Instantiateで生成した直後に取得する例です。

GameObject bullet = Instantiate(bulletPrefab, pos, rot);
Rigidbody rb = bullet.GetComponent<Rigidbody>;
if (rb != null)
{
  rb.velocity = transform.forward * 10f;
}

衝突相手(other)から取得するのが、当たり判定処理の基本パターンです。

よくあるつまずき

GetComponentでつまずきやすい点です。

  • null → コンポーネント未追加、タイプミス、別オブジェクトを見ている
  • 2Dと3Dの取り違え → RigidbodyとRigidbody2D、ColliderとCollider2Dは別型
  • 子に付いているのに取れない → 通常のGetComponentは自分のみ。
    InChildrenを使う
  • 非アクティブで取れない → includeInactiveオプションを確認
管理人
管理人

NullReferenceExceptionが出たら、まずInspectorでコンポーネントが付いているか確認しましょう。
スクリプト名の綴りミスで型が見つからないケースも多いです。

SerializeFieldで参照をInspectorから渡す方法もあります。
頻繁に触るコンポーネントは、ドラッグで接続しておくとGetComponent不要になる場面もあります。
状況に応じて使い分けましょう。

複数の同じ型コンポーネントが1つのGameObjectに付いている場合は、GetComponents(複数形)で配列取得もできます。
通常は1オブジェクト1スクリプトの設計にしておくと、取得まわりがシンプルに保てます。

管理人
管理人

GetComponentは「その場の部品を取る」道具です。
慣れてきたら、SerializeFieldとFind、TryGetComponentの3つを状況で使い分けられると、設計が一段きれいになりますよ。

記事を読んで「作ってみたい!」と思ったら!初心者でも1本完成できる講座で実力をつけよう

知識を読むだけで終わらせるのはもったいない。実際に手を動かしてゲームを1本完成させることで、理解が一気に深まります。プログラミング未経験からでも取り組める講座で、ゲーム開発の第一歩を踏み出しましょう。

Unity ノンフィールドRPG+スレスパ風JRPG講座【Unity6対応!初心者でもデッキ構築×JRPGをスマホ向けに作れる!】

Unity ノンフィールドRPGの作り方講座+Slay the Spire風デッキ構築JRPGの作り方講座

  • Unity6対応・スマホ化対応で最新環境のゲーム開発が学べる
  • Slay the Spire風のデッキ構築システム×JRPGの組み合わせを実装
  • 初心者でも迷わず進められる丁寧な解説構成
  • ノンフィールドRPGとデッキ構築JRPGの2つをまとめて学べるセット講座

Unity ノンフィールドRPGの作り方講座+Slay the Spire風デッキ構築JRPGの作り方講座は、プログラミング未経験の初心者でも取り組みやすい、ステップバイステップ形式の講座です。

Unity6対応・スマホ化対応の最新カリキュラムで、読んで「なるほど」と思った知識を、実際に動くゲームとして形にする体験ができます。

「何から始めればいいかわからない…」という初心者が最初に選ぶ一本として最適な講座です。

Unity6対応・スマホ化対応の最新カリキュラム
ゼロからでもRPGを完成させよう
→ スレスパ風デッキ構築JRPG講座を見てみる
初心者でもスマホ対応のRPGが作れる!まずは1本完成を目指そう!

Unity 2Dアクションゲームの作り方講座(ロックマン風)【全16回!初心者でもスマホ化・広告実装まで対応した本格横スクロールACTが作れる!】

Unity 2Dアクションゲームの作り方講座(ロックマン風)

  • ロックマン・マリオ・カービィのような横スクロールACTをゼロから開発
  • 7ステージ+ラスボスステージの本格的なゲーム設計を初心者でも実現
  • スマホ化・AdMob広告実装まで対応してリリースまで見据えた構成
  • 敵AI15体・多彩なマップギミック・武器システムを完全実装
  • 完全オリジナルゲームをアセット不使用で素材提供付きで制作

Unity 2Dアクションゲームの作り方講座(ロックマン風)は、ロックマン・スーパーマリオ・星のカービィのような2D横スクロールアクションゲームを、初心者でもゼロから開発できるようになる講座です。

全16回で当たり判定・物理挙動・敵AIの知識を実際のゲームコードとして実装する体験が詰め込まれています。スマホ化・広告実装まで対応しているため、「作って終わり」ではなくリリースまで見据えた実践スキルが身につきます。

「憧れのアクションゲームを自分の手で作ってみたい」という初心者に強くおすすめの一本です。

スマホ化・広告実装まで対応した本格横スクロールACT
初心者でもロックマン風2Dアクションをリリースまで作り上げよう
→ 2Dアクションゲームの作り方講座を見てみる
初心者でも本格ACTが完成する!広告収益まで視野に入れた実践スキルを手に入れよう!

ゼルダ風3Dアクションゲームの作り方講座【全16回!初心者でも3Dアクションがスマホ対応で作れる!】

ゼルダ風3Dアクションゲームの作り方講座

  • ゼルダの伝説・モンハン・原神のような3Dアクションをゼロから開発
  • 「3Dは難しそう」と感じている初心者でも取り組みやすい丁寧な解説構成
  • スマホ化対応で実機で動かせるゲームが完成
  • アセットを使った実践的なゲーム開発手法が身につく
  • 画像・動画・全ソースコード公開の充実したサポート

ゼルダ風3Dアクションゲームの作り方講座は、「3Dゲームは難しそう…」と感じている初心者こそおすすめの入門講座です。

全16回の丁寧な解説で、ゼルダの伝説・モンハン・原神のような本格的な3Dアクションゲームを確実に完成まで導きます。スマホ化対応で実機で動かせるため、初めて3Dゲームを作り上げた達成感がひときわ大きい講座です。

「3Dゲームを自分でも作れるか試してみたい」という初心者の最初の一歩として最適です。

初心者でも3Dアクションがスマホ対応で完成する
ゼルダ風3Dアクションゲームで3D開発の壁を一気に突破しよう
→ ゼルダ風3Dアクションゲームの作り方講座を見てみる
全16回でスマホで動くオリジナル3Dゲームを完成させよう!

まとめ

UnityのGetComponentは、同じGameObjectに付いたコンポーネントを取得する基本APIです。
TryGetComponentで安全に、InChildren・InParentで階層をまたぎ、Awakeでキャッシュして使い回すのが実践的な流れです。

今日はCubeにRigidbodyを付け、GetComponentで力を加えて動かすところまで試してみてください。
nullが出たらInspectorの付け忘れを疑うクセをつけましょう。

コンポーネントのつなぎ方を作品で学びたい方は、Unity入門の森の講座も参考になります。
当たり判定や移動処理など、GetComponentが自然に登場する流れを追えます。
まずは1つの部品を取り出して動かしてみましょう。

コメント

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