【Unity】クリックされたゲームオブジェクトを複数のオブジェクトが検知する方法。

2022年8月25日

どうも、だらはです。
今回はクリックされたゲームオブジェクトを複数のオブジェクトが検知する方法についてまとめました。

スポンサーリンク

概要と詳細

先ず、表題の件について、シンプルに流れを表すとすると、

  1. クリックを検知してメソッドを実行。
  2. 検知させたいオブジェクトにアタッチされたスクリプトのpublic変数に対して、1のメソッドにてゲームオブジェクトを渡す。

以上となります。
では、画面キャプチャとスクリプトを使って詳細を記載します。

1. クリックを検知してメソッドを実行。

先ずはクリックの検知をするゲームオブジェクト(CubeA, CubeB)の設定です。
今回は簡単にクリックを検知できるEventTriggerを使って実装したいと思います。
EventTriggerの使い方については以下の記事にまとめましたので参照して頂けたらと思います。

◆EventTriggerについてまとめ

以下の図を参考にヒエラルキーを準備、各種設定をしてください。
SampleCubeスクリプトは以下の通りです。

◆SampleCube.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SampleCube : MonoBehaviour
{
    GameObject objParent;
    GameObject objParentP;

    SampleCap sampleCapA;
    SampleCap sampleCapB;

    void Start()
    {
        objParent = transform.parent.gameObject;                //親オブジェクトを取得
        objParentP = objParent.transform.parent.gameObject;     //親の親オブジェクトを取得

        //非アクティブを想定してtransform.FindでCapsuleA, CapsuleBを検索
        GameObject obj = objParentP.transform.Find("Capsule").gameObject;
        sampleCapA = obj.transform.Find("CapsuleA").GetComponent<SampleCap>();
        sampleCapB = obj.transform.Find("CapsuleB").GetComponent<SampleCap>();
    }

    public void toSampleCap()
    {
        sampleCapA.obj = transform.gameObject;
        sampleCapB.obj = transform.gameObject;
    }
}

◆参考画像

2. 検知させたいオブジェクトにアタッチされたスクリプトのpublic変数に対して、1のメソッドにてゲームオブジェクトを渡す。

次は検知させたいオブジェクトにpublic変数を準備します。
CubeAまたはCubeBのクリックを検知すると、CapsuleACapsuleBpublic変数にクリックしたゲームオブジェクトが格納されるようにスクリプトを書きました。
また、クリックしたゲームオブジェクト名がデバッグログに表示されるようにスクリプトを組んでみました。
以下の図を参考に設定をしてみて下さい。
SampleCapスクリプトは以下の通りです。

◆SampleCap.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SampleCap : MonoBehaviour
{
    bool flgClick;
    public GameObject obj;

    void Update()
    {
        //クリックされたら1回だけデバッグログを表示する。(オブジェクトが2つなので計2回表示される)
        if (obj != null)
        {
            if (flgClick == false)
            {
                Debug.Log(obj.name + "がクリックされました");
            }
            flgClick = true;
        }
    }
}

◆参考画像

実行結果

では実行結果です。
実行後、CubeAをクリックしたときの画面キャプチャがこちらとなります。

◆実行結果

はい。正しくゲームオブジェクトが設定されることが確認できました。
いやはや、良かった良かった!

最後に

いかがでしたでしょうか。
今回紹介した方法を応用してスタンプカードなども作ることができます。
別途、スタンプカードを作る方法などまとめてみようと思うので、もし応用例として興味があれば読んで頂けると嬉しいです。
是非、Unity道をともに極めて行きませう:)

以上、だらはでした。

スポンサーリンク

応用

Posted by daraha_gm