protected override void Start() { base.Start(); enemyState = botStates.waiting; Nav = GetComponent <NavMeshAgent>(); Nav.speed = Speed; }
protected override void Start() { base.Start(); Nav = GetComponent <NavMeshAgent>(); Nav.speed = Speed; Nav.angularSpeed = 360; EnemyState = botStates.waiting; RespawnPlace = transform.position; }
protected override IEnumerator attack(float animationTime) { isAttacking = true; Anim.SetTrigger("attack"); yield return(new WaitForSeconds(animationTime / 2)); //Desplega el damageBox Aud.PlayOneShot(audioAttack); damageBox.localPosition = new Vector3(0, 0, 0); damageBox.localScale = Vector3.one; yield return(new WaitForSeconds(animationTime / 2)); //reset damagebox damageBox.localScale = Vector3.zero; isAttacking = false; EnemyState = botStates.chase; }
private IEnumerator DespawnNWait(float RespawnTime) { //WaitForDie yield return(new WaitForSeconds(audioDeath.length)); //Deactive gameObject.SetActive(false); if (RespawnTime <= 0) { yield break; } yield return(new WaitForSeconds(RespawnTime)); //Reset transform.position = RespawnPlace; invulnerable = false; isAttacking = false; Anim.SetTrigger("respawn"); EnemyState = botStates.waiting; Health = maxHealth; gameObject.SetActive(true); }
protected override void GetHurt(int inDamageValue) { if (!invulnerable) { Health -= (inDamageValue - defense); if (Health > 0) { Aud.PlayOneShot(audioDamage); Anim.SetTrigger("damage"); } else { Aud.PlayOneShot(audioDeath); EnemyState = botStates.dying; Anim.SetTrigger("death"); gameManager.instance.StartCoroutine(DespawnNWait(RespawnTime)); } invulnerable = true; if (Health > 0) { StartCoroutine(ModifierCountDown(1, (x) => invulnerable = x)); } } }
private void Update() { //pausa if (gameManager.instance.IsPaused) { return; } //IA switch (EnemyState) { case botStates.waiting: //inicia patrullaje en caso de no haberse activado ya if (!isPatrolling) { StartCoroutine(patrol(patrolTime)); } //revisa constamente en busqueda del objetivo a atacar if (Vector3.Distance(gameManager.instance.player.position, transform.position) <= visionDistance) { if (Vector3.Angle(gameManager.instance.player.position, transform.position) <= visionRange) { EnemyState = botStates.chase; } } break; case botStates.chase: if (!Aud.isPlaying) { Aud.Play(); } if (Axis != Vector2.zero) { Axis = Vector2.zero; } if (Vector3.Distance(gameManager.instance.player.position, transform.position) <= chaseDistance) { if (Vector3.Distance(gameManager.instance.player.position, transform.position) <= attackDistance) { Anim.SetFloat("speed", 0f); EnemyState = botStates.attack; } else { Nav.SetDestination(gameManager.instance.player.position); Anim.SetFloat("speed", 1f); } } else { EnemyState = botStates.waiting; } break; case botStates.attack: Aud.Stop(); if (!isAttacking) { transform.LookAt(gameManager.instance.player); StartCoroutine(attack(attackTime)); } break; case botStates.dying: //Deja de realizar acciones break; default: Debug.Log("Error en update del objeto" + transform.name); break; } }