Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Deu tilti na TORRE.CS Erro: Assets/Script/Torre.cs(57,32): error CS0029: Cannot implicitly convert type `Missil[]' to `Missil'

QUANDO TENTO COMPILAR,...

Assets/Script/Torre.cs(57,32): error CS0029: Cannot implicitly convert type Missil[]' toMissil'

============= E AGORA ??? quem irá me ajudar ... observe o erro ...

veja, o script da minha Torre.cs

using UnityEngine;
using System.Collections;

public class Torre : MonoBehaviour {

    [SerializeField] private float raioDeAlcance;

    private float momentoDoUltimoDisparo;

    [Range(0,3)]
    public float tempoDeRecarga = 0.5f;

    public GameObject missilPrefab; //projetilPrefab;

    // Use this for initialization
    void Start () {

    //    Atira ();

    }

    // Update is called once per frame
    void Update () 
    {
        Inimigo alvo = EscolheAlvo ();
        if (alvo != null) {
            Atira (alvo); // a cada FRAME, é chamado o médoto Atira() produzindo vários míssil
        }
    }

    private void Atira (Inimigo inimigo)
    {

        float tempoAtual = Time.time;
        if (tempoAtual > momentoDoUltimoDisparo + tempoDeRecarga) {

            momentoDoUltimoDisparo = tempoAtual;

        //Instantiate (missilPrefab);

        GameObject pontoDeDisparo = this.transform.Find ("CanhaoDaTorre/PontoDeDisparo").gameObject;
        Vector3 posicaoDoPontoDeDisparo = pontoDeDisparo.transform.position;
        /*
         Instantiate (missilPrefab, posicaoDoPontoDeDisparo, Quaternion.identity);

            //GameObject projetilObject = 
                //(GameObject) 

            Missil missil = missilPrefab.GetComponents<Missil>();
            missil.DefineAlvo (inimigo);

            */

            GameObject projetilObject = (GameObject) Instantiate (missilPrefab, posicaoDoPontoDeDisparo, Quaternion.identity);


            Missil missil = projetilObject.GetComponents<Missil> ();
            missil.DefineAlvo (inimigo);
        }
    }



    private Inimigo EscolheAlvo() {

        GameObject[] inimigos = GameObject.FindGameObjectWithTag ("Inimigo");
        // alinha acima, captura todos os inimigos, a referência a ele (inimigo) ou seja a instância

        foreach (GameObject inimigo  in inimigos) {

            // como saberemos em quel alvo atirar ?
            if (EstaNoRaioDeAlcance (inimigo)) {
                return inimigo.GetComponent<Inimigo>();
            }
        }
        return null;
    }

    private bool EstaNoRaioDeAlcance(GameObject inimigo) {

        Vector3 posicaoTorre = this.transform.position;
        Vector3 posicaoTorreNoPlano = Vector3.ProjectOnPlane (posicaoTorre, Vector3.up);
        // Vector3.up quer dizer um plano normnal, ou seja não inclinado, um PLANO perfeito
        Vector3 posicaoInimigo = inimigo.transform.position;
        Vector3 posicaoInimigoNoPlano = Vector3.ProjectOnPlane (posicaoInimigo, Vector3.up);
        // Vector3.up quer dizer um plano normnal, ou seja não inclinado, um PLANO perfeito

        float distanciaParaInimigo = Vector3.Distance (posicaoTorreNoPlano, posicaoInimigoNoPlano);

        return distanciaParaInimigo <= raioDeAlcance;

    }

}
1 resposta
solução!

infelizmente não obtive ajuda para minha DÚVIDA, aqui registro que resolvi por conta própria, o que me deixou a pensar, e achando que o curso deixou a DESEJAR neste momento.

Pronto resolvi, esta funcionando.