Esempio n. 1
0
    // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
    override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        //REFERENCIAS
        enemy        = animator.gameObject.GetComponentInParent <RANGED_enemy>();
        target       = enemy.target;
        forceApplier = animator.gameObject.GetComponentInParent <ForceApplier>();

        enemy.transform.LookAt(target.transform.position);
        enemy.isVulnerable = false;

        //-ATTACK SETUP-
        //Ignora la colisión entre el enemigo y el objetivo del ataque para que no obstaculice la embestida
        Physics.IgnoreCollision(target.GetComponent <CharacterController>(), enemy.GetComponent <CharacterController>(), true);
        //Acto seguido, activa el trigger que es el que se encargará de gestionar si el ataque ha golpeado, su daño, knockback, etc.
        //enemy.attackCollider.enabled = true;
        //Y finalmente reemplazamos el daño 'default' por el daño de este ataque en concreto.
        enemy.damage = attackDamage;

        //-ATTACK ACTION-
        Instantiate(enemy.projectile, new Vector3(enemy.transform.position.x, enemy.transform.position.y + 1.2f, enemy.transform.position.z), enemy.transform.rotation);
        //Una vez se han establecido las condiciones para el ataque, se impulsa al enemigo en dirección a su objetivo, con una fuerza igual a 'attackImpulse'
        Vector3 attackDir = (target.transform.position - enemy.transform.position).normalized;

        forceApplier.AddImpact(new Vector3(-attackDir.x, 0, -attackDir.z), recoilImpulse);
    }
Esempio n. 2
0
    // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
    override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        //REFERENCIAS
        enemy        = animator.gameObject.GetComponentInParent <RANGED_enemy>();
        target       = enemy.target;
        forceApplier = animator.gameObject.GetComponentInParent <ForceApplier>();

        enemy.transform.LookAt(target.transform.position); //Mira a su objetivo

        //-ATTACK ACTION-
        GameObject animaKiller = Instantiate(animaKillerPrefab, new Vector3(enemy.transform.position.x, enemy.transform.position.y + 1.2f, enemy.transform.position.z), enemy.transform.rotation);

        animaKiller.GetComponent <ProjectileController>().target = target.transform;
        //Una vez se han establecido las condiciones para el ataque, se impulsa al enemigo en dirección a su objetivo, con una fuerza igual a 'attackImpulse'
        Vector3 attackDir = (target.transform.position - enemy.transform.position).normalized;

        forceApplier.AddImpact(new Vector3(-attackDir.x, 0, -attackDir.z), recoilImpulse);
    }
    // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
    override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        enemy  = animator.gameObject.GetComponentInParent <RANGED_enemy>();
        target = enemy.target;

        waitedTime = 0;

        enemy.transform.LookAt(target.transform.position);

        enemy.agent.isStopped = true;
        enemy.agent.velocity  = Vector3.zero;

        //DECISIÓN DE ATAQUE
        //Una vez preparadas las condiciones para atacar, el enemigo decidirá cómo atacar (ataque simple o ataque WP) en base a su condición actual:

        if (enemy.willpower > enemy.animaKillerCost) //Si el enemigo tiene la posibilidad de ejecutar el ataque WP, lo
        {
            //Lo ejecutará
            doesAnimaKiller = true;

            //Y el aviso para hacerlo durará más tiempo que con un ataque normal:
            attackWaitTime = specialAttackWaitTime;

            //Anuncia ataque con un bark/popup visual !!!1
            var     canvas           = GameObject.FindGameObjectWithTag("InferiorCanvas");
            Vector3 viewportPosition = Camera.main.WorldToScreenPoint(new Vector3(enemy.transform.position.x, enemy.transform.position.y + 2, enemy.transform.position.z));

            bark = Instantiate(barkAttackPrefab, viewportPosition, Quaternion.identity);
            bark.GetComponentInChildren <Text>().text = specialAttackName;
            bark.transform.SetParent(canvas.transform, false);
            bark.transform.position = viewportPosition;
        }
        else //En caso de que no sea posible para él ejecutarlo,
        {
            //Ataca de forma básica,
            doesAnimaKiller = false;
        }
    }
 // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
 override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
 {
     enemy  = animator.gameObject.GetComponentInParent <RANGED_enemy>();
     target = enemy.target;
 }