はじめに
Unityでゲームを作っていると、「あるオブジェクトの状態を、別のオブジェクトのスクリプトから取得したい!」という場面がよくあります。例えば、**「プレイヤーが特定のオブジェクトに触れたら、別のオブジェクトが消える」**という処理を作りたいとき、オブジェクト同士が情報をやり取りする必要があります。
しかし、**「他のスクリプトの変数って、どうやって取得すればいいの?」**と悩むことも多いですよね。特に、bool(真偽値)を別のスクリプトから取得して、特定の条件を満たしたときに処理を実行するのは、初心者がつまずきやすいポイントの一つです。
この記事では、Unityで**「他のスクリプトのboolを取得する方法」**を3つ紹介します!
instance(シングルトン)を使う方法GameObject.Findを使う方法- フィールドに直接オブジェクトを設定する方法
今回のサンプルでは、以下の動作を実装します。
✅ Sphere(球体)とCube(立方体)を用意
✅ SphereがCubeにぶつかると、Cube側のboolがtrueになる
✅ Sphereがboolの値を取得し、trueなら自分自身を削除する
このような処理を作れるようになれば、ゲームの中でオブジェクト同士を連携させるスクリプトが書けるようになります!
Unity初心者の方も、わかりやすいコードと実践的な解説で学べるので、ぜひ最後まで読んでみてください!
ちなみに、「コードを書くのはちょっと苦手…」「もっと簡単に条件やフラグの管理をしたい!」という方には、
ビジュアルスクリプティングで人気の【PlayMaker】というアセットもおすすめです!
👇詳しくはこちら
▶ PlayMaker(Unity Asset Store)
1. 準備するオブジェクト
まず、Unity上で以下の2つのオブジェクトを作成します。
✅ Sphere(球) … 移動できるオブジェクト。Cubeにぶつかったら削除される。
✅ Cube(立方体) … Sphereと衝突するとboolの値を変更する。
この2つのオブジェクトを使って、「SphereがCubeにぶつかったらCube側のboolをtrueにし、その値をSphere側で取得して削除する」という処理を作っていきます。
① UnityでSphereとCubeを作成する
Unityエディターを開いて、以下の手順でオブジェクトを作成します。
- ヒエラルキー(Hierarchy)ウィンドウで右クリック
- 「3D Object」 → 「Sphere」 を選択(球を作成)
- 同じように「3D Object」 → 「Cube」 を選択(立方体を作成)
作成したオブジェクトの名前をそれぞれ変更しておくと分かりやすくなります。
Sphere→ 「Sphere」Cube→ 「Cube」
② SphereにRigidbodyを追加
Sphereが動けるようにするため、Rigidbody(リジッドボディ)を追加します。
- Sphereを選択
- インスペクター(Inspector)ウィンドウで「Add Component」ボタンをクリック
- 「Rigidbody」を検索して追加
Use Gravityのチェックを外す(重力を無効化)
これで、Sphereが物理演算を使って動けるようになりました。
③ スクリプトを作成してオブジェクトに追加
オブジェクト間の情報をやり取りするため、以下のスクリプトを作成し、それぞれのオブジェクトにアタッチ(適用)します。
- ヒエラルキーの何もない部分を右クリック
- 「Create」 → 「C# Script」 を選択
- 以下のスクリプトを作成
CubeAccept.cs(Cubeにアタッチ)SphereMove.cs(Sphereにアタッチ)
このスクリプトの中で、SphereがCubeにぶつかったら、Cubeのスクリプトのboolをtrueにし、それをSphere側で参照する処理を書いていきます。

オブジェクトの準備が完了したので、次は**「他のスクリプトのBoolを取得する方法」**を3つのやり方で実装していきます!
① instanceを使う方法(シングルトン)
まず最初に紹介するのは、シングルトン(Singleton)パターンを使って、他のスクリプトのbool値を取得する方法です。
これは、どこからでも特定のスクリプトにアクセスできるようにする仕組みで、ゲーム全体で共通のデータを参照したいときに便利です。
シングルトンを使ったboolの取得方法
今回の例では、CubeがSphereに衝突したときにisTouchedをtrueにし、
その値をSphere側で取得して、Sphereを削除する処理を行います。
Cube側のスクリプト(CubeAccept.cs)
まずは、Cubeにアタッチするスクリプトを作成します。
手順
- プロジェクトウィンドウを右クリック
- 「Create」→「C# Script」を選択
- 新しいスクリプトを作成し、「CubeAccept」と名前を付けます
- 以下のコードを入力してください。
CubeAccept.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CubeAccept : MonoBehaviour
{
public static CubeAccept instance; // シングルトンのインスタンス
public bool isTouched; // 衝突判定用のbool
void Awake()
{
// インスタンスが未設定の場合、このオブジェクトをインスタンスとして登録
if(instance == null)
{
instance = this;
}
}
void Start()
{
isTouched = false; // 初期状態はfalse
}
void OnCollisionEnter(Collision other)
{
// Sphereが衝突した場合、isTouchedをtrueにする
if(other.gameObject.name == "Sphere")
{
isTouched = true;
}
}
}
Sphere側のスクリプト(SphereMove.cs)
次に、Sphereにアタッチするスクリプトを作成します。
手順
- プロジェクトウィンドウを右クリック
- 「Create」→「C# Script」を選択
- 新しいスクリプトを作成し、「SphereMove」と名前を付けます
- 以下のコードを入力してください。
SphereMove.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SphereMove : MonoBehaviour
{
void Update()
{
// CubeAcceptのisTouchedをチェックし、trueならSphereを削除
if(CubeAccept.instance.isTouched)
{
Destroy(gameObject);
}
// キーボードの矢印キーでSphereを移動
float dx = Input.GetAxis("Horizontal") * 0.1f;
float dz = Input.GetAxis("Vertical") * 0.1f;
transform.position = new Vector3(
transform.position.x + dx, 0, transform.position.z + dz
);
}
}
シングルトン(Singleton)を使うメリット
✅ どこからでもアクセス可能
→ CubeAccept.instance.isTouched と記述するだけで取得できる!
✅ スクリプトの管理がシンプル
→ Findを使う必要がなく、オブジェクトを取得する処理が不要!
✅ ゲーム全体で共通のデータ管理がしやすい
→ 例えば、スコア管理やゲームの進行状況などにも応用可能!
実際に動かしてみよう!
手順
- Unityエディタでシーンを作成
- ヒエラルキー(Hierarchy)ウィンドウで右クリック → 「3D Object」→「Sphere」を作成
- もう一度右クリック → 「3D Object」→「Cube」を作成
- Sphereにリジッドボディ(Rigidbody)を追加
Sphereを選択- インスペクター(Inspector)ウィンドウの「Add Component」をクリック
- 「Rigidbody」を検索して追加
- Use Gravityのチェックを外す
- スクリプトをオブジェクトにアタッチ
CubeAccept.cs→Cubeにドラッグ&ドロップSphereMove.cs→Sphereにドラッグ&ドロップ
- 再生ボタンを押してプレイ!
- 矢印キーで
Sphereを移動させて、Cubeにぶつけてみよう! Cubeに当たると、Sphereが消えることを確認!
- 矢印キーで
補足:シングルトンの注意点
シングルトンを使うと便利な反面、注意点もあります。
⚠️ 複数のインスタンスが作られないようにする
→ if(instance == null) { instance = this; } のチェックを忘れずに!
⚠️ シングルトンが不要な場面では使わない
→ すべてのスクリプトでアクセスできるので、大規模なプロジェクトでは管理が難しくなることも!
→ 小規模なプロジェクトや1つのオブジェクトだけが持つデータ管理に向いている!

シングルトンを使うと、簡単に他のスクリプトの変数を取得できるため、特に小規模なゲームではとても便利です!
ただし、シングルトンを多用するとコードが複雑になりやすいため、適材適所で使いましょう。
次は、GameObject.Findを使った取得方法を紹介します!
② GameObject.Findで取得する方法
GameObject.Findを使えば、特定のオブジェクトを名前で検索し、そのオブジェクトのスクリプトにアクセスすることができます。この方法を使って、他のスクリプトのbool変数を取得してみましょう。
1. 方法の概要
GameObject.Find("オブジェクト名")を使って対象のオブジェクトを探し、GetComponent<スクリプト名>()でそのスクリプトの変数にアクセスします。
ただし、この方法にはオブジェクトの名前が変わると参照できなくなるというデメリットがあるため、
オブジェクトの名前は正確に指定するようにしましょう。
2. Cube(Boolフラグを立てる側)のスクリプト
まず、Cubeに追加するCubeAccept.csを作成します。
このスクリプトでは、Sphereと衝突したときにisTouchedをtrueに変更します。
CubeAccept.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CubeAccept : MonoBehaviour
{
public bool isTouched;
void Start()
{
isTouched = false; // 初期状態ではfalse
}
void OnCollisionEnter(Collision other)
{
if(other.gameObject.name == "Sphere") // Sphereとぶつかったら
{
isTouched = true; // フラグをtrueにする
}
}
}
💡 ポイント
isTouchedは最初falseに設定。OnCollisionEnterでSphereと衝突したときにisTouched = trueに変更。other.gameObject.name == "Sphere"で衝突相手の名前を判定。
3. Sphere(Boolを参照する側)のスクリプト
次に、Sphereに追加するSphereMove.csを作成します。
このスクリプトでは、CubeAcceptのisTouchedがtrueになったらSphereを削除します。
SphereMove.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SphereMove : MonoBehaviour
{
public GameObject cube; // Cubeオブジェクトの参照を保存
void Start()
{
cube = GameObject.Find("Cube"); // "Cube"という名前のオブジェクトを探す
}
void Update()
{
if (cube != null && cube.GetComponent<CubeAccept>().isTouched)
{
Destroy(gameObject); // isTouchedがtrueならSphereを削除
}
// キー操作でSphereを移動させる
float dx = Input.GetAxis("Horizontal") * 0.1f;
float dz = Input.GetAxis("Vertical") * 0.1f;
transform.position = new Vector3(
transform.position.x + dx, 0, transform.position.z + dz
);
}
}
💡 ポイント
GameObject.Find("Cube")でCubeオブジェクトを取得。cube.GetComponent<CubeAccept>().isTouchedでCubeAccept.csのisTouchedにアクセス。isTouchedがtrueになったら、Destroy(gameObject)でSphereを削除。cube != nullをチェックして、オブジェクトが存在するかを確認する。
4. Unityでのセットアップ
- オブジェクトを作成
- ヒエラルキーウィンドウで右クリック →
3D Object→Cubeを作成。 - ヒエラルキーウィンドウで右クリック →
3D Object→Sphereを作成。 Sphereにリジッドボディ(Rigidbody) を追加。(Use Gravityはオフ)
- ヒエラルキーウィンドウで右クリック →
- スクリプトを追加
CubeAccept.csをCubeに追加。SphereMove.csをSphereに追加。
- ゲームプレイ
Sphereを移動させてCubeにぶつける。CubeのisTouchedがtrueになり、Sphereが削除されることを確認!
5. まとめ
| メリット | デメリット |
|---|---|
| コードがシンプルでわかりやすい | オブジェクト名が変わると動かなくなる |
| 他のスクリプトの変数を簡単に取得できる | Findは処理負荷がかかる(大量に使うと非推奨) |
🔹 GameObject.Find は簡単に使えるが、オブジェクト名の変更に弱いので注意!
🔹 より柔軟に使いたい場合は instance や 直接フィールドに入れる方法も検討しよう!
③ フィールドに直接オブジェクトを入れる方法
最後に、Inspector(インスペクター)で直接参照を設定する方法を紹介します。
この方法は、コードの記述量が少なく、手軽にオブジェクト間の情報を共有できるため、初心者にもおすすめです。
💡 どんなときに使う?
- 参照するオブジェクトが シーン内に固定 されている
- 変更するオブジェクトが 動的に増えたり減ったりしない
- Find()を使いたくない、もしくは
instanceを使いたくない
例えば、Cube が Sphere にぶつかったら isTouched を true にし、
その値を Sphere 側のスクリプトでチェックして、Sphere を削除する、という処理を実装します。
📌 Cube(Boolフラグを持つ)側のスクリプト
まず、CubeAccept.cs を作成し、Cube に追加します。
CubeAccept.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CubeAccept : MonoBehaviour
{
public bool isTouched;
void Start()
{
isTouched = false;
}
void OnCollisionEnter(Collision other)
{
if(other.gameObject.name == "Sphere")
{
isTouched = true;
}
}
}
📝 このスクリプトのポイント
isTouchedというbool型の変数を用意。OnCollisionEnter()でSphereにぶつかったらisTouched = trueにする。
📌 Sphere(CubeのBoolを参照する)側のスクリプト
次に、SphereMove.cs を作成し、Sphere に追加します。
SphereMove.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SphereMove : MonoBehaviour
{
public CubeAccept cubeAccept; // CubeAccept の参照
void Update()
{
if(cubeAccept.isTouched)
{
Destroy(gameObject);
}
float dx = Input.GetAxis("Horizontal") * 0.1f;
float dz = Input.GetAxis("Vertical") * 0.1f;
transform.position = new Vector3(
transform.position.x + dx, 0, transform.position.z + dz
);
}
}
📝 このスクリプトのポイント
CubeAcceptのスクリプトを 直接フィールド(変数)として用意。CubeAcceptのisTouchedをチェックして、trueならSphereを削除。Sphereは矢印キー (Horizontal,Vertical) で移動できるようにする。
🛠 Unityエディターでの設定
この方法では、コードの中で Find() を使わず、Inspector で直接オブジェクトを設定 します。
Sphereを選択SphereMoveスクリプトの 「Cube Accept」フィールド を探すCubeを ドラッグ & ドロップ してセットする
✅ これで、SphereMove.cs の cubeAccept に CubeAccept がセットされました!
🎮 実際に動かしてみよう
- 再生ボタンを押してゲームを開始
Sphereを矢印キーで動かし、CubeにぶつけるCubeAcceptのisTouchedがtrueになり、Sphereが削除される!
🧐 メリット・デメリット
| 方法 | メリット | デメリット |
|---|---|---|
| フィールドに直接設定 | シンプルで分かりやすい | 手動で設定が必要 |
| Find() で取得 | コードだけで完結できる | オブジェクト名が変わるとエラー |
| instance を使う | どこからでも参照できる | 設計ミスするとバグが発生しやすい |
まとめ
- Inspector で直接オブジェクトを設定する方法は、簡単で確実!
CubeAcceptのisTouchedをSphereMove側で そのまま取得 できる。- シーン内の固定オブジェクト なら この方法がベスト!
→ ただし、動的に生成されるオブジェクトには向かない ので注意。

この方法を使えば、他のスクリプトの変数を簡単に取得できます!
ぜひ試してみてください! 🚀
あわせて読みたい
- Unityで他のスクリプトの関数を実行する方法!初心者向け解説
スクリプト間連携の基本!関数の呼び出し方をわかりやすく解説。 - Unityでスペースキーを使ったBool変数の切り替え方法を徹底解説
Bool変数の操作に迷ったらこの解説!実用例でしっかり理解できます。 - Unity初心者向け!別スクリプトからオブジェクトを透明化する方法
他スクリプトからの操作例として、表示切替にも応用できる技術です。 - Unity初心者必見!特定のクラスが付いたオブジェクトを配列にまとめる方法
タグや型でオブジェクトを操作する場合に役立つ知識を解説。 - Unityのオブジェクト指向設計!継承・ポリモーフィズム・インターフェースを徹底解説
スクリプト同士の連携をもっと柔軟にしたい人におすすめの設計指南。
よくある質問(FAQ)
- Q
instanceがnullになるのはなぜ? - A
instanceがnullになってしまう原因はいくつか考えられます。✅ 解決策:
CubeAcceptクラスのAwake()メソッドでinstanceが適切に設定されているか確認する。CubeAcceptスクリプトがシーン内のオブジェクトにアタッチされているかをチェックする。instanceはstaticな変数なので、シーンの再読み込み時に初期化されていない可能性もある。その場合はDontDestroyOnLoad(this.gameObject);を使って、オブジェクトが削除されないようにするのも手。
- Q
GameObject.Findでオブジェクトが見つからない! - A
GameObject.Find("Cube")を使ってオブジェクトを取得しようとしているのに、nullになってしまうことがあります。✅ 解決策:
- オブジェクトの名前が間違っていないか確認する(大文字小文字も区別される)。
Findでオブジェクトを探す前に、オブジェクトがシーン内に存在しているか確認する。- 非アクティブのオブジェクトは
Findでは取得できないので、cube.SetActive(true);でアクティブにしてみる。 Findはパフォーマンス的に負担が大きいため、Start()ではなく、可能ならAwake()で取得しておくのがベスト。
- Q
GetComponentでスクリプトが取得できない! - A
例えば、
cube.GetComponent<CubeAccept>().isTouchedの部分でエラーが出る場合、考えられる原因は次の通りです。✅ 解決策:
CubeAcceptスクリプトがCubeオブジェクトに正しくアタッチされているか確認する。Findで取得したオブジェクトがnullになっていないか調べる。 csharpコピーする編集するif (cube == null) { Debug.LogError("Cubeオブジェクトが見つかりません!"); }CubeAcceptクラスがpublicになっているかチェックする(internalやprivateだと他のスクリプトから取得できない)。







※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。
※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。