Está dúvida já apareceu aqui, porém, a pessoa que fez a pergunta disse que já solucionou, porém não postou mais nada. Está retornando essa exceção: " IndexOutOfRangeException: Array index is out of range. Missil.Start () (at Assets/Scripts/Missil.cs:14)" Se eu não me engano essa exceção acontece pois não existe um GameObject naquela posição do vetor, por isso já tente colocar um 'if' para apenas adicionar no alvo se houver uma Game object com a tag "Inimigo", dessa maneira:
private void Start()
{
GameObject[] inimigos = GameObject.FindGameObjectsWithTag("Inimigo");
if (inimigos[0] != null)
{
alvo = inimigos[0];
AutoDestroyDepoisDeSegundos(5);
}
}
Porém mesmo assim, continua dando o mesmo erro.
Segue como esta o meu script sem esse 'if':
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Missil : MonoBehaviour {
private float velocidade = 10;
GameObject alvo;
[SerializeField] private int pontosDeDano;
private void Start()
{
GameObject[] inimigos = GameObject.FindGameObjectsWithTag("Inimigo");
alvo = inimigos[0];
AutoDestroyDepoisDeSegundos(5);
}
// Update is called once per frame
void Update () {
Anda();
if(alvo != null)
{
AlteraDirecao();
}
}
private void Anda()
{
Vector3 posicaoAtual = transform.position;
Vector3 deslocamento = transform.forward * Time.deltaTime * velocidade;
transform.position = posicaoAtual + deslocamento;
}
private void AlteraDirecao()
{
Vector3 posicaoAtual = transform.position;
Vector3 posicaoDoAlvo = alvo.transform.position;
Vector3 direcaoDoAlvo = posicaoDoAlvo - posicaoAtual;
transform.rotation = Quaternion.LookRotation(direcaoDoAlvo);
}
private void AutoDestroyDepoisDeSegundos(float segundos)
{
Destroy(this.gameObject, segundos);
}
private void OnTriggerEnter(Collider elementoColidido)
{
if (elementoColidido.CompareTag("Inimigo"))
{
Destroy(this.gameObject);
Inimigo inimigo = elementoColidido.GetComponent<Inimigo>();
inimigo.RecebeDano(pontosDeDano);
}
}
}
Se eu conseguir achar a solução, eu posto aqui