// 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); }
// 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; }