Olá! Fiquei um pouco confusa com a necessidade de termos que definir "minhaReserva" do script "ObjetoDaReservaDeInimigo" no script "ReservaDeInimigo". Ambos os códigos a seguir:
public class ObjetoDaReservaDeInimigos : MonoBehaviour
{
private ReservaDeInimigos minhaReserva;
public void Devolver(){
this.minhaReserva.DevolverInimigo(this.gameObject);
}
public void SetReserva(ReservaDeInimigos reserva){
this.minhaReserva = reserva; //AQUI
}
}
public class ReservaDeInimigos : MonoBehaviour
{
[SerializeField]
private GameObject prefab;
[SerializeField]
private int quantidade;
private Stack<GameObject> reservaDeInimigos;
private void Start()
{
this.reservaDeInimigos = new Stack<GameObject>();
this.CriarTodosOsInimigos();
}
private void CriarTodosOsInimigos(){
for(var i = 0; i < this.quantidade; i++){
var inimigo = GameObject.Instantiate(this.prefab, this.transform);
var objetoDaReserva = inimigo.GetComponent<ObjetoDaReservaDeInimigos>(); //AQUI
objetoDaReserva.SetReserva(this); //AQUI
inimigo.SetActive(false);
this.reservaDeInimigos.Push(inimigo);
}
}
public GameObject PegarInimigo(){
var inimigo = this.reservaDeInimigos.Pop();
inimigo.SetActive(true);
return inimigo;
}
public void DevolverInimigo(GameObject inimigo){
inimigo.SetActive(false);
this.reservaDeInimigos.Push(inimigo);
}
public bool TemInimigo(){
return this.reservaDeInimigos.Count > 0;
}
}
Por que não se é entendido que em this.minhaReserva.DevolverInimigo(this.gameObject); "minhaReserva" não faz referência a Reserva de Inimigos? sJá que temos a linha private ReservaDeInimigos minhaReserva; anteriormente e em inclusive this.minhaReserva.DevolverInimigo(this.gameObject); utilizamos um método da própria Reserva (DevolverInimigo())?
Não sei ficou muito confuso, posso tentar reformular minha pergunta se for o caso.
Obrigada desde já!! :)