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

Unity FindObjectOfTypeの使い方 | オブジェクトの探し方

Unity 基礎操作・設定

「スコアを管理しているオブジェクトを、別のスクリプトから触りたい」

シーン上のオブジェクトを名前や型で探す方法として、FindObjectOfTypeやFindGameObjectWithTagがあります。
手軽ですが、使い方を誤ると動作が重くなったり、意図しないオブジェクトを取得したりします。

この記事では、Find系メソッドの基本、Tag検索、新しいAPI(FindAnyObjectByType)、パフォーマンス上の注意、Inspector参照との使い分けまで整理します。

  • 他のオブジェクトのスクリプトにアクセスしたいが、参照の渡し方が分からない…
  • FindをUpdate内で呼んでいて、ゲームがカクつく。
  • FindObjectOfTypeがnullを返し、NullReferenceExceptionが出る。

✨ この記事でわかること

  • FindObjectOfTypeの基本と戻り値
  • FindGameObjectWithTagでのTag検索
  • Unity 6以降のFindAnyObjectByType
  • 毎フレーム検索を避ける理由
  • SerializeField参照を優先する設計
  • 初心者でも理解できる解説

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

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

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

★★★★★ (Unity6対応)

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

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

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

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

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

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

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

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

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

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

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

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

Find系メソッドとは|シーン内を検索する

Find系は、実行中にシーン内のGameObjectやコンポーネントを後から探すためのAPIです。
Inspectorでドラッグして参照を渡せないときの「つなぎ」として使われます。

代表的なメソッドは次のとおりです。

  • FindObjectOfType<T> — 型Tのコンポーネントを1つ探す(古いAPI)
  • FindAnyObjectByType<T> — 同上(Unity 2023以降推奨)
  • FindGameObjectWithTag(“Tag名”) — Tagが一致するGameObjectを1つ探す
  • FindGameObjectsWithTag(“Tag名”) — Tag一致を配列で取得

「探す」処理は便利ですが、シーン全体を走査するため、頻繁に呼ぶと負荷になります。

FindObjectOfTypeの基本

型を指定して、シーン内の最初の1件を取得します。

ScoreManager scoreManager = FindObjectOfType<ScoreManager>;

if (scoreManager != null)
{
  scoreManager.AddScore(10);
}

同じ型のコンポーネントが複数ある場合、どれが返るかは保証されません。
スコア管理のように1つだけ存在するオブジェクト向けの使い方です。

Unity 2023以降では、非推奨の警告が出ることがあります。
その場合は次のAPIに置き換えます。

ScoreManager scoreManager = FindAnyObjectByType<ScoreManager>;

FindGameObjectWithTagでTag検索

InspectorのTagで「Player」「Enemy」などを設定しておき、Tag名で探す方法です。

GameObject player = GameObject.FindGameObjectWithTag("Player");

if (player != null)
{
  Transform playerTransform = player.transform;
}

複数の敵をまとめて取得する例です。

GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy");

foreach (GameObject enemy in enemies)
{
  // 各敵への処理
}

Tagは、Project Settings → Tags and Layers で事前に登録が必要です。
未登録のTag名を使うとエラーになります。

管理人
管理人

Playerオブジェクトに「Player」Tagを付けておくと、カメラ追従やUI更新で FindGameObjectWithTag がよく使われます。
Tagの付け忘れに注意してくださいね。

パフォーマンス注意|Update内で呼ばない

Find系の最大の落とし穴は、毎フレーム検索することです。
Update内で FindObjectOfType を呼ぶと、シーンが大きいほどカクつきやすくなります。

呼び方 評価
StartやAwakeで1回だけFind 小規模プロジェクトなら許容範囲。
結果を変数にキャッシュする
Update内で毎フレームFind 非推奨。
参照は事前に保持する
InspectorでSerializeField参照 最も軽く、意図も明確。
基本はこちらを優先

キャッシュする定番パターンです。

ScoreManager scoreManager;

void Start
{
  scoreManager = FindAnyObjectByType<ScoreManager>;
}

void Update
{
  if (scoreManager != null)
  {
  // キャッシュした参照を使う
  }
}

SerializeField参照を優先する設計

可能なら、Inspectorから参照を渡す方式が安全です。

public class EnemyAI : MonoBehaviour
{
  [SerializeField] Transform player;

  void Update
  {
    if (player == null) return;
    // player の位置を使った処理
  }
}

Hierarchy上のPlayerを、EnemyのInspectorにドラッグするだけで接続できます。
Findより高速で、どのオブジェクトを参照しているかも一目で分かります。

Findが向くのは、次のような場面です。

  • シーンをまたいで動的に作られたマネージャーを探す
  • プロトタイプ段階で、とりあえず1本つなぎたい
  • Prefab単体では参照先が決まらない一時的な処理
参照のつなぎ方を選ぶ手順
  • STEP1
    Inspectorで渡せるか確認

    固定のPlayerやUIなら、SerializeFieldが第一候補です。
  • STEP2
    1回だけFindしてキャッシュ

    動的生成が絡む場合は、StartでFindし変数に保持します。
  • STEP3
    Update内のFindを削除

    パフォーマンス問題が出たら、まずここを疑います。

よくあるつまずき

Find系でよくあるエラーと対処です。

  • nullが返る → 対象が非アクティブ、シーンに存在しない、型やTagの指定ミス
  • 複数ヒットで意図と違う → シングルトン設計か、SerializeFieldで明示的に指定
  • 重い → Update内のFindをやめ、キャッシュまたはInspector参照へ
  • 非推奨警告 → FindAnyObjectByType へ置き換え
管理人
管理人

「とりあえずFind」は学習初期のつなぎとしてはOKです。
動いたら、Inspector参照に置き換えていくのが成長のサインですよ。

シーンをまたいでオブジェクトが消える場合、Findの結果がnullになることもあります。
シーン読み込み後に再度キャッシュし直すか、イベントで「マネージャーが準備できた」と通知する設計にすると、参照切れを防ぎやすくなります。

名前で探すGameObject.Find("名前")も存在しますが、名前変更に弱く、パフォーマンス面でもFind系と同様に注意が必要です。
型やTag、Inspector参照の方が保守しやすい場面が多いです。

記事を読んで「作ってみたい!」と思ったら!初心者でも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のFindObjectOfTypeやFindGameObjectWithTagは、シーン内のオブジェクトを検索する便利なAPIです。
Startで1回だけ呼んでキャッシュするか、可能ならSerializeFieldで参照を渡すのが基本です。
Update内での毎フレーム検索は避けましょう。

今日はScoreManagerを1つ作り、別スクリプトからFindAnyObjectByTypeで取得してスコアを加算する、最小の流れを試してみてください。

オブジェクトのつなぎ方を作品全体で学びたい方は、Unity入門の森の講座も参考になります。
マネージャー設計やUI連携など、実践的な構成を追いながら身につけられます。
まずはFindを1回だけ使う形から始めましょう。

コメント

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