スポンサーリンク
スポンサーリンク
UnityUnityメモ

Unityでオブジェクトから離れたときにイベントを発生させる

Unity

はじめに

今回は、Unityでオブジェクトから離れたときにイベント発生させる方法、具体的にはCubeにクリックによる力を加え、Cubeが着地しているときと空中に浮かんでいるときで色を変える方法について、初心者の方にも理解しやすいように解説します。

基本設定

Unityを開き、新しいプロジェクトを作成します。3Dプロジェクトを選択してください。プロジェクトが開いたら、まずは操作するCubeをシーンに追加しましょう。Hierarchyパネルで右クリックし、「3D Object」>「Cube」を選択します。これで、シーンにCubeが追加されました。

Cubeに力を加える

Cubeをクリックした際に力を加えるには、スクリプトを作成してCubeにアタッチします。プロジェクトパネルで右クリックし、「Create」>「C# Script」を選択し、スクリプトに「AddForceOnClick」という名前をつけます。このスクリプトを開き、以下のコードを記述します。

  1. 変数の定義:
    • private Rigidbody rb;: オブジェクトにアタッチされているRigidbodyコンポーネントを参照します。Rigidbodyは、物理演算をオブジェクトに適用するために必要です。
    • public float upForce = 200f;: クリック時にオブジェクトに加える上向きの力の大きさを定義します。この値はInspectorウィンドウから調整可能で、デフォルトでは200に設定されています。
  2. Startメソッド:
    • ゲーム開始時に一度だけ呼び出され、Rigidbodyコンポーネントへの参照をrb変数に格納します。このステップはオブジェクトが物理演算を受ける準備をするために必要です。
  3. Updateメソッド:
    • ゲーム中毎フレームに呼び出され、マウスの左ボタンが押されたかどうかを検出します。Input.GetMouseButtonDown(0)メソッドは、左ボタンがそのフレームで押されたかどうかをチェックし、trueを返す場合、指定された力(upForce)をオブジェクトに上向き(Y軸方向)に加えます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AddForceOnClick : 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));
        }
    }
}

色の変化を実装する

Cubeの色を着地しているときと空中に浮かんでいるときで変えるためには、さらにスクリプトを編集します。

OnCollisionExitメソッド

  • OnCollisionExitは、ゲームオブジェクトが他のオブジェクトから離れた瞬間に呼び出されます。
  • この例では、collision.gameObject.name == "Plane"をチェックして、衝突して離れたオブジェクトが「Plane」かどうかを判断しています。
  • 条件が真(つまり、離れたオブジェクトが「Plane」である)の場合、現在のゲームオブジェクトのRendererコンポーネントを取得し、そのmaterial.colorプロパティをColor.redに設定しています。これは、ゲームオブジェクトが空中にあることを示します。

OnCollisionEnterメソッド

  • OnCollisionEnterは、ゲームオブジェクトが他のオブジェクトと衝突した瞬間に呼び出されます。
  • このメソッドも、衝突したオブジェクトが「Plane」であるかどうかをcollision.gameObject.name == "Plane"でチェックします。
  • 条件が真であれば、同様にRendererコンポーネントを取得し、material.colorColor.greenに変更します。これは、ゲームオブジェクトが地面に着地していることを示します。

注意点

  • このコードは、衝突するオブジェクトが正確に「Plane」という名前であることを前提としています。ゲームの設計によっては、衝突判定を行いたいオブジェクトの名前や、より汎用的な判定方法(例えばタグを使用する)を変更する必要があるかもしれません。
  • オブジェクトのRendererコンポーネントやmaterialにアクセスするためには、該当するゲームオブジェクトにこれらのコンポーネントがアタッチされている必要があります。また、マテリアルが色の変更をサポートしている必要があります。
//床から離れたとき
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;
        }
    }

ゲームオブジェクトが「Plane」に着地した際には緑色に、そして「Plane」から離れたときには赤色に変わります。これにより、ゲームオブジェクトの状態(空中にあるか、地面にあるか)を視覚的に示すことができます。

まとめ

Unityでクリック操作によりCubeに力を加え、さらにその状態(着地しているか、空中に浮かんでいるか)に応じて色を変える方法を紹介しました。Unityでの開発は、こうした基本的な機能から始めて、徐々に複雑な機能を追加していくことで、想像力豊かなアプリやゲームを作り上げることができます。ぜひ挑戦してみてください。

スポンサーリンク
C-BA memo
タイトルとURLをコピーしました