Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Dando erro aqui, sendo que fiz correto, ao menos eu acho:

Script Missil:
public void DefineAlvo(Inimigo inimigo)
    {
        alvo = inimigo;
    }

No Script Torre declarei:
float tempoAtual = Time.time;
        if (tempoAtual > momentoDoUltimoDisparo + tempoDeRecarga) {
            momentoDoUltimoDisparo = tempoAtual;
            GameObject pontoDeDisparo = this.transform.Find ("CanhaoDaTorre/PontoDeDisparo").gameObject;
            Vector3 posicaoDoPontoDeDisparo = pontoDeDisparo.transform.position;
            Instantiate (projetilPrefab, posicaoDoPontoDeDisparo, Quaternion.identity);
            Missil missil = projetilPrefab.GetComponent<Missil> ();
            missil.DefineAlvo (inimigo);
        }
    }

*Aqui está dizendo que o método é menos acessível, por que?: Inconsistent accessibility: parameter type 'Inimigo' is less accessible than method 'Missil.DefineAlvo('Inimigo') Não Compila de jeito nenhum. Parei aqui no projeto.

3 respostas
solução!

Olá Hudson,

Verifica se todas as suas classes dos scripts são públicas. Todas elas devem começar com public class. O erro está indicando algo nesse sentido. Tenta fazer essa verificação e se não tiver nada de errado, posta aqui a classe Missil completa para a gente dar uma olhada.

Bem, as classes iniciam com public, mas ao londo delas tem private. Seguindo o tutorial... Segue a classe Missil:

public class Missil : MonoBehaviour {
    private float velocidade = 10;
    private Inimigo alvo;

    [SerializeField] private int pontosDeDano;

    void Start(){

        //GameObject[] inimigos = GameObject.FindGameObjectsWithTag ("Inimigo");
        //alvo = inimigos [0];
        //alvo = GameObject.Find ("Inimigo");
        AutoDestroiDepoisDeSegundos (5);
    }

    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 AutoDestroiDepoisDeSegundos (float segundos){
        Destroy (this.gameObject, segundos);
    }
    public void DefineAlvo(Inimigo inimigo)
    {
        alvo = inimigo;
    }
    void OnTriggerEnter (Collider elementoColidido)
    {
        if (elementoColidido.CompareTag ("Inimigo"))
        {
            Destroy (this.gameObject);
            //Destroy (elementoColidido.gameObject);

            Inimigo inimigo = elementoColidido.GetComponent<Inimigo> ();
            inimigo.RecebeDano (pontosDeDano);
        }
    }
}

A classe Inimigo não estava public, estava somente, class Inimigo. Funcionou agora :) Valeu, obrigado Jeferson!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software