Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Herencia

Iniciado por juanma_teso, Diciembre 05, 2015, 01:24:56 AM

Tema anterior - Siguiente tema
Hola a todos!! Ya está aquí el puente y con él un poco de tiempo libre para teclear un poco de código, para este finde me he propuesto crear el sistema de disparos, colisiones y daño de mi pequeño juego, mi duda es en cómo aplicar la herencia, una de los conceptos que no he terminado de comprender -.-'Tengo pensado en hacer una clase "Colisionable" que tengan todos los objetos que deban recibir los disparos y que pase algo, algún sonido o efecto o algo, desde enemigos a objetos del escenario que se pueda destruir o no. Mi duda es cómo hacerlo porque no lo tengo del todo claro, sobre todo el tema de virtual o no sé si use el @override (de java), he estado buscando pero para aclarar dudas lo mejor es el foro.
public class Colisionable : MonoBehaviour {
   
    public float vida;//O resistencia
    public bool destruible;
    //Otras variables que se me ocurran
   
    public virtual void ImpactoBala(int damage){}
    public virtual void Destruir(){}
    //Otra función que se me ocurra y deban llevar todos
}
public class Enemigo : Colisionable {
   
    //Vuelvo a declarar las variables vida y destruible?
   
    public override void ImpactoBala (int damage)
    {
        //Código para éste caso
    }
    public override void Destruir ()
    {
        //Código para éste caso
    }
    public void FuncionSoloDeEnemigo () {}
}
Ésta sería la clase genérica, las clases heredadas también heredarán de MonoBehaviour, no? Las clases heredadas pueden tener funciones que no tengan la clase padre, no? Cuando quiera llamar a la función ImpactoBala() puedo hacer referencia a la clase padre? (Sino no me serviría porque quiero hacer siempre un GetComponent<Colisionable>().ImpactoBala();)

Diciembre 05, 2015, 10:13:09 AM #1 Ultima modificación: Diciembre 05, 2015, 10:16:52 AM por Quel
[quote author=juanma_teso" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="34611" data-ipsquote-contentcommentid="124588">Cuando quiera llamar a la función ImpactoBala() puedo hacer referencia a la clase padre? (Sino no me serviría porque quiero hacer siempre un GetComponent<Colisionable>().ImpactoBala();)[/quote]Si, por tercera vez. Si la clase Colisionable tiene la funcion ImpactoBala() y la clase Enemigo:Colisionable sobreescribe esa función, se ejecutará la función ImpactoBala() del Enemigo:Colisionable.
Recuerda que si en algún momento, desde la clase Enemigo, quieres llamar la funcion ImpactoBala() de la clase Colisionable, puedes usar el puntero base. El comando base.ImpactoBala() ejecutaría la función del padre.


El tema de herencia y polimorfismo si me dijeron que era potente, aunque hasta que no se necesita no se aprecia...

Etiquetas: