「同じオブジェクトに付いているRigidbodyを、スクリプトから動かしたい」
GameObjectには複数のコンポーネントが付いています。
別のコンポーネントを操作するには、GetComponentで取得するのが基本です。
Collider、Rigidbody、自作スクリプトなど、あらゆる処理の入口になります。
この記事では、GetComponentの基本、TryGetComponent、子・親オブジェクトからの取得、nullエラー対策、よくあるつまずきまで整理します。
- GetComponentを書いたのにNullReferenceExceptionが出る…
- 子オブジェクトのスクリプトを、親から取得したいが方法が分からない。
- 毎回GetComponentを呼ぶべきか、変数に保存すべきか迷う。
✨ この記事でわかること
- GetComponentの基本構文
- TryGetComponentで安全に取得する方法
- GetComponentInChildren・InParentの違い
- 取得結果を変数にキャッシュするコツ
- nullが返る原因と対処
- 初心者でも理解できる解説
\プログラミング未経験でも大丈夫!まずは1本作り切ろう/
初心者が最初に選ぶならコレ
Unity ノンフィールドRPG
+スレスパ風JRPG講座
Unity6対応・スマホ化対応の最新カリキュラム。「何から始めればいいかわからない」という初心者でも、ステップごとに手を動かすだけでRPGが完成します。
憧れのアクションゲームに挑戦
Unity 2Dアクションゲーム
の作り方講座(ロックマン風)
初心者でもロックマン風の横スクロールACTが作れる講座。7ステージ+ラスボスという本格構成で、スマホ化・広告実装まで対応。「自分のゲームをリリースしたい」夢を叶えます。
3Dゲーム開発の入口はここ
ゼルダ風3Dアクションゲーム
の作り方講座
「3Dゲームって難しそう…」と感じている初心者向けの講座。全16回でゼルダ風3Dアクションがスマホ対応で作れるようになります。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 を使った処理
}
- STEP1必要なコンポーネントを確認
Inspectorで、対象GameObjectにRigidbody等が付いているか見ます。
- STEP2Awakeで取得してキャッシュ
フィールドに保存し、Updateではキャッシュを使います。
- STEP3TryGetComponentで存在確認
付いていない可能性がある場合は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をスマホ向けに作れる!】

- Unity6対応・スマホ化対応で最新環境のゲーム開発が学べる
- Slay the Spire風のデッキ構築システム×JRPGの組み合わせを実装
- 初心者でも迷わず進められる丁寧な解説構成
- ノンフィールドRPGとデッキ構築JRPGの2つをまとめて学べるセット講座
Unity ノンフィールドRPGの作り方講座+Slay the Spire風デッキ構築JRPGの作り方講座は、プログラミング未経験の初心者でも取り組みやすい、ステップバイステップ形式の講座です。
Unity6対応・スマホ化対応の最新カリキュラムで、読んで「なるほど」と思った知識を、実際に動くゲームとして形にする体験ができます。
「何から始めればいいかわからない…」という初心者が最初に選ぶ一本として最適な講座です。
Unity6対応・スマホ化対応の最新カリキュラム
ゼロからでもRPGを完成させよう
→ スレスパ風デッキ構築JRPG講座を見てみる
初心者でもスマホ対応のRPGが作れる!まずは1本完成を目指そう!
Unity 2Dアクションゲームの作り方講座(ロックマン風)【全16回!初心者でもスマホ化・広告実装まで対応した本格横スクロールACTが作れる!】

- ロックマン・マリオ・カービィのような横スクロールACTをゼロから開発
- 7ステージ+ラスボスステージの本格的なゲーム設計を初心者でも実現
- スマホ化・AdMob広告実装まで対応してリリースまで見据えた構成
- 敵AI15体・多彩なマップギミック・武器システムを完全実装
- 完全オリジナルゲームをアセット不使用で素材提供付きで制作
Unity 2Dアクションゲームの作り方講座(ロックマン風)は、ロックマン・スーパーマリオ・星のカービィのような2D横スクロールアクションゲームを、初心者でもゼロから開発できるようになる講座です。
全16回で当たり判定・物理挙動・敵AIの知識を実際のゲームコードとして実装する体験が詰め込まれています。スマホ化・広告実装まで対応しているため、「作って終わり」ではなくリリースまで見据えた実践スキルが身につきます。
「憧れのアクションゲームを自分の手で作ってみたい」という初心者に強くおすすめの一本です。
スマホ化・広告実装まで対応した本格横スクロールACT
初心者でもロックマン風2Dアクションをリリースまで作り上げよう
→ 2Dアクションゲームの作り方講座を見てみる
初心者でも本格ACTが完成する!広告収益まで視野に入れた実践スキルを手に入れよう!
ゼルダ風3Dアクションゲームの作り方講座【全16回!初心者でも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つの部品を取り出して動かしてみましょう。



コメント