Вы можете передать делегата кнопке
public class Spawner : MonoBehaviour{
void Start(){
GameObject btn = Instantiate<GameObject>(btnPrefab);
btn.GetComponent<Button>().onClick.AddListener(Method);
}
void Method(){}
}
РЕДАКТИРОВАТЬ на основе комментария:
"кнопка содержит очень простой скрипт, содержащий только один GameObject ( назначенный при создании экземпляра)) "
Итак, вы передаете GameObject при создании экземпляра.Давайте рассмотрим в следующем примере, что эта цель дается из GetTarget () (я не знаю, как вы ее получили)
void Start()
{
for(int i = 0 ; i < 100; i++)
{
GameObject btn = Instantiate<GameObject>(btnPrefab);
GameObject target = GetTarget();
btn.GetComponent<Button>().onClick.AddListener(()=>
{
Method(target);
});
}
}
void Method(GameObject obj)
{
Debug.Log(obj.name);
}
Концепция, которую нужно захватить, - это лямбда-выражение со стрелкой.Это можно понимать как метод без имени, который используется только там (так как у него нет имени, его нельзя вызывать в другом месте).Этот метод возвращает void и не имеет параметров, поэтому он соответствует требованиям прослушивателя Button.В этом безымянном методе вы вызываете другой метод, который принимает цель GameObject.Здесь создается замыкание, поэтому даже объект Button не знает о цели, он находит его.
Сначала не все так просто, но вы его получите.