はじめに
UnityのOnCollisionExitを使えば、オブジェクトが別のオブジェクトから離れたときにアクションを起こすことができます。この記事では、クリックでCube(キューブ)に力を加え、着地しているときと浮上しているときで色を変える方法を説明します。
Unityを触ったことがないという方はコチラの記事から見てみてください!
1. Unityでプロジェクトの準備をする
まずは、Unityを開いて新しい3Dプロジェクトを作成しましょう。プロジェクトが開いたら、次のステップに進みます。
床を作成する
- ヒエラルキーウィンドウで右クリックし、「3D Object」→「Plane」を選び、床を作成します。
- 位置やサイズはそのままで問題ありません。
キューブを作成する
- ヒエラルキーウィンドウで右クリックします。
- 「3D Object」→「Cube」を選びます。
- 同じようにして、「3D Object」→「Plane」を選び、床を作成します。
- キューブを少し上に移動させ、床の上に配置します。

物理特性を追加する
キューブが物理的に動くようにするため、Rigidbodyコンポーネントを追加します。
- キューブを選択し、インスペクターウィンドウで「Add Component」ボタンをクリックします。
- 「Rigidbody」を検索して追加します。
2. スクリプトを作成する
次に、キューブに力を加えるスクリプトを作成します。
- プロジェクトウィンドウで右クリックし、「Create」→「C# Script」を選びます。
- スクリプトの名前を「ClickUp」にします。
- スクリプトをダブルクリックして開き、以下のコードを入力します。
コード全体の説明
Rigidbodyコンポーネントを取得して、オブジェクトに物理的な力を加えます。- マウスの左ボタンが押されたときにオブジェクトを上に動かします。
- オブジェクトが床に接触したり、離れたりしたときに色を変更します。
各部分の説明
変数の宣言
rb: オブジェクトの物理演算を管理するためのRigidbody型の変数。upForce: オブジェクトを上に動かす力の大きさを指定する変数。200という値を初期値にしています。
Startメソッド
Startメソッドは、ゲームが開始されたときに一度だけ実行されます。rb変数に、このスクリプトがアタッチされているオブジェクトのRigidbodyコンポーネントを代入します。
Updateメソッド
Updateメソッドは、毎フレーム呼び出されます。Input.GetMouseButtonDown(0)は、マウスの左ボタンが押されたことをチェックします。- 左ボタンが押されると、
rb.AddForceで上方向(Y軸方向)に力を加えます。この力はupForceの値によって決まります。
OnCollisionExitメソッド
- オブジェクトが他のオブジェクトと接触して離れたときに呼ばれます。
collision.gameObject.nameが”Plane”(床)だった場合、このオブジェクトの色を赤に変更します。
OnCollisionEnterメソッド
- オブジェクトが他のオブジェクトと接触したときに呼ばれます。
collision.gameObject.nameが”Plane”(床)だった場合、このオブジェクトの色を緑に変更します。
全体の動き
- ゲーム開始時に、オブジェクトの
Rigidbodyを取得します。 - 毎フレーム、マウスの左ボタンが押されたかどうかをチェックします。
- マウスの左ボタンが押されたら、オブジェクトに上方向の力を加えます。
- オブジェクトが床に接触したら緑色に、離れたら赤色に変わります。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ClickUp : MonoBehaviour
{
private Rigidbody rb;
public float upForce = 200f;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
rb.AddForce(new Vector3(0, upForce, 0));
}
}
// 床から離れたとき
private void OnCollisionExit(Collision collision)
{
if (collision.gameObject.name == "Plane")
{
GetComponent<Renderer>().material.color = Color.red;
}
}
// 床に着地したとき
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.name == "Plane")
{
GetComponent<Renderer>().material.color = Color.green;
}
}
}
このスクリプトでは、クリックでキューブに上向きの力を加え、着地しているとき(OnCollisionEnter)に緑色、浮上しているとき(OnCollisionExit)に赤色に変わるようにしています。
5. スクリプトをキューブにアタッチする
作成したスクリプトをキューブにアタッチします。
- プロジェクトウィンドウで「ClickUp」スクリプトを選びます。
- そのスクリプトをドラッグしてキューブにドロップします。
3. ゲームをプレイして確認する
これで準備完了です!再生ボタンを押してゲームを実行し、キューブをクリックしてみてください。キューブが浮上しているときは赤色に、着地すると緑色に変わることを確認できます。
これでキューブをクリックして力を加え、色を変える方法がわかりましたね。ぜひ、他のオブジェクトや効果を試してみて、Unityの楽しさを体験してください!
あわせて読みたい
- 🔵 Unity初心者必見!オブジェクト衝突でスクリプトを停止する簡単なテクニック
衝突イベントを使ってスクリプトの動きを制御する方法を学べます! - 🟢 Unity初心者必見!ぶつかったオブジェクトと同じ大きさにする方法
OnCollision系イベントの応用例として、サイズ調整を行うスクリプトも必見です。 - 🟣 UnityでCubeを動かして衝突オブジェクトの名前を取得する方法【初心者向け】
衝突対象の名前を取得することで、条件分岐などの応用が可能になります。 - 🟡 Unity初心者向け!オブジェクト衝突で親子関係を作る方法
衝突時に親子関係を動的に設定する応用テクニックです。 - 🟠 Unity初心者向け!触れたオブジェクトを記録して名前を表示する簡単な方法
「触れた相手を記録する」機能を簡単に実装できます。
よくある質問
- Qキューブがうまく動かない場合はどうすればいいですか?
- A
まず、キューブに
Rigidbodyが追加されているか確認してください。また、スクリプトが正しくアタッチされているかも確認してください。
- Qキューブの色が変わらないのはなぜですか?
- A
スクリプト内で
Rendererを取得しているか確認してください。また、マテリアルが設定されているかもチェックしてください。
- Qクリックしてもキューブが動かない場合は?
- A
スクリプトの
Updateメソッド内でInput.GetMouseButtonDown(0)を使っている部分を確認し、デバッグログを追加してクリックイベントが検出されているか確認すると良いでしょう。







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