前提・実現したいこと
Unityで複数のゲームオブジェクトからクリックされた情報を取得したいです。
(どのゲームオブジェクトがクリックされたかの情報も欲しいです。)
クリック判定をしたいゲームオブジェクト用のクラスを用意して、
そのクラスを配列に入れています。
配列に入れたクラスのゲームオブジェクトにforeachで
・イベントトリガーコンポーネントを追加
・イベントトリガーにイベントを追加
をしています。
発生している問題・エラーメッセージ
どのオブジェクトを押しても同じオブジェクトを2回押したことになってしまいます。
(画像の2個のキューブどちらを押しても「2番目のボタンが押されました。」が2回出力)
該当のソースコード
c#
TestButton.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
[System.Serializable]
public class TestObject
{
public GameObject gameObject;
public Image image;
public EventTrigger eventTrigger;
}
Test.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class Test : MonoBehaviour
{
//配列を宣言
public TestObject[] TestObjects = new TestObject[2];
private void Start() { //イベントトリガーに追加したいイベントを定義 EventTrigger.Entry entry = new EventTrigger.Entry(); //イベントの種類を指定 entry.eventID = EventTriggerType.PointerClick; int num = 0; //配列の繰り返し foreach (TestObject testObject in TestObjects) { //コンポーネントを追加 testObject.gameObject.AddComponent<EventTrigger>(); //コンポーネントを配列に追加 testObject.eventTrigger = testObject.gameObject.GetComponent<EventTrigger>(); //イベントで呼び出す関数を指定 entry.callback.AddListener((eventDate) => { ClickPiece(num); }); //イベントトリガーにイベントを追加 testObject.eventTrigger.triggers.Add(entry); num += 1; } } public void ClickPiece(int i) { Debug.Log(i + "番目のボタンが押されました。"); }
}
試したこと
下記サイトを参考に非永続的なリスナーをインスペクターで見れるようにしてみました。
https://baba-s.hatenablog.com/entry/2018/06/07/090000
イベントが2つ追加されてしまっているように思いますが解決策がわかりません。
補足情報(FW/ツールのバージョンなど)
Unity 2020.3.6f1
その他
わかりづらい説明で申し訳ありません。
また上記のやり方でなくとももっと良いやり方があれば教えて欲しいです。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/22 10:29