O problema é que o quando o objeto é instanciado em cena, ele aparece com o nome " objeto(clone)", ou seja, é uma cópia do prefab e não o prefab original, então eu não consigo pegar a posição dele.
A solução que eu encontrei foi começar o objeto como nullo, e pegar ele toda vez que aparecer na cena:
Nesse caso, eu só preciso que ele seja instanciado e ao chegar em determinada posição, ele seja destruído, e que isso se repita toda vez que ele for instanciado na cena.
Porém eu não acho que essa seja uma solução muito boa, se alguém souber como eu posso melhorar isso…
Uma abordagem melhor seria instanciar o objeto, e ter nele próprio um script de controle, onde você pode mover, executar ações, destruir o objeto… Isso elimina a necessidade de ficar buscando o objeto a cada frame. Veja como poderia ser feito:
public class ObjectController : MonoBehaviour
{
private void Update()
{
if (transform.position.x < 10)
{
// Executa ação
Destroy(gameObject); // Destrói o objeto ao atingir a condição
}
}
}
Nesse caso, você adiciona esse script ao prefab do objeto. Cada instância do objeto gerenciará sua própria ação e destruição sem precisar de outro script para monitorá-la.
Solução 2: Referenciar o objeto instanciado diretamente
Se você precisa que outro script monitore o objeto, você pode manter uma referência ao objeto instanciado diretamente:
[SerializeField] private GameObject prefab;
private GameObject objetoInstanciado;
void Update()
{
if (objetoInstanciado == null)
{
// Instancia o objeto e guarda a referência
objetoInstanciado = Instantiate(prefab);
}
if (objetoInstanciado.transform.position.x < 10)
{
// Executa ação
Destroy(objetoInstanciado);
objetoInstanciado = null; // Limpa a referência após a destruição
}
}
Nesse exemplo, objetoInstanciado é uma referência direta ao objeto instanciado, eliminando a necessidade de buscá-lo repetidamente com FindGameObjectWithTag.