質問: GameObject.Instantiate(prefab) as RectTransform; item.SetParent(transform,false); //ここで何か属性(TapIndex)を持たせる? } //結果 //prefab(1) //prefab(2) //prefab(3) ``` ループする際に何らかの属性をprefabに持たせてタップした時に Debug.Logでその属性を表示したいのですが方法が分かりません。 例えばタップした時にprefabのindex(属性)を返してくるような ``` public void TapListItem(int tapIndex){ return tapIndex; } ``` みたいなprefab をtapした時にindexを返すようなメソッドはないでしょうか? 環境) PC: mac Unity2018.2 言語:C#
回答: 1. オブジェクト自身にインデックス番号をもたせる ========================= いろいろやりかたはありそうですが、オブジェクト自身にインデックス番号をもたせてみるというのはどうでしょうか。 どういうオブジェクトかよくわからなかったのでとりあえずButtonでテストしました。 1.下記 test1.cs をアタッチしたButtonをPrefab化。 Buttonをクリックすると`OnClickMessage`メソッドを実行する。 test1.cs ``` using System.Collections; using System.Collections.Generic; using UnityEngine; public class test1 : MonoBehaviour { public int indexNo; // 自分のインデックス番号 public void OnClickMessage() { Debug.Log(this.indexNo); // 自分のインデックス番号をLog表示 } } ``` 2.インスタンス化したオブジェクトを紐付ける先として とりあえず Panel を作成。(Grid Layout Groupだけ設定) 3.空のゲームオブジェクトに下記 test2.cs をアタッチ。 ButtonのPrefabと紐づけ先のPanelをインスペクターからアタッチ test2.cs ``` using System.Collections; using System.Collections.Generic; using UnityEngine; public class test2 : MonoBehaviour { [SerializeField] GameObject prefab; // ButtonのPrefab [SerializeField] GameObject panel; // オブジェクト紐づけ先のPanel // Start is called before the first frame update void Start() { for (int i=0; i < 10; i++) { var item = GameObject.Instantiate(prefab) as GameObject; item.transform.SetParent(panel.transform, false); item.GetComponent().indexNo = i; // 作成したButtonのindexNoに数値をセット item.name = "Button" + i; // Buttonの名前を Button + インデックス番号 にする } } } ```