public void AutoAttack() { if(target != null) { float distacne = Vector3.Distance(target.position, transform.position); if(distacne > attack_maxDistance)//停止自动攻击 { target = null; aniState = WolfAnimateState.Idle; } else if(distacne <= attack_minDistance)//自动攻击 { Quaternion rotation = Quaternion.LookRotation(target.position - transform.position); transform.rotation = Quaternion.Slerp(transform.rotation, rotation, 5 * Time.deltaTime); stopMove(); if(attack_timer == 0) { RandomAttack(); //attack_timer = 0; GetComponent<Animation>().CrossFade(animate_attack_now); } attack_timer += Time.deltaTime; if(animate_attack_now == animName_normalAttack) { if(attack_timer > time_normalattack) { //产生伤害 TODO animate_attack_now = animName_Idle; GetComponent<Animation>().CrossFade(animate_attack_now); } } else if(animate_attack_now == animName_crazyAttack) { if (attack_timer > time_crazyattack) { //产生伤害 TODO animate_attack_now = animName_Idle; GetComponent<Animation>().CrossFade(animate_attack_now); } } if(attack_timer > attac_rate) { //再次攻击 RandomAttack(); attack_timer = 0; attack_timer += Time.deltaTime; GetComponent<Animation>().CrossFade(animate_attack_now); } } else//朝着主角移动 { //transform.LookAt(target); Quaternion rotation = Quaternion.LookRotation(target.position - transform.position); transform.rotation = Quaternion.Slerp(transform.rotation, rotation, 5 * Time.deltaTime); if (agent.enabled) agent.SetDestination(transform.position + transform.forward * (2 + 2 * Random.Range(0, 1))); //cc.SimpleMove(transform.forward * speed); GetComponent<Animation>().CrossFade(animName_Walk); attack_timer = 0; } } else { aniState = WolfAnimateState.Idle; GetComponent<Animation>().CrossFade(animName_Idle); attack_timer = 0; } }
//受到伤害 public void TakeDamage(int attack) { if (aniState == WolfAnimateState.Death) return; float value = Random.Range(0f, 1); target = GameObject.FindGameObjectWithTag(Tags.player).transform; // transform.LookAt(target); if(value < miss_rate) { //AudioSource.PlayClipAtPoint(sound_miss, transform.position); hudtext.Add("Miss", Color.cyan,0f); aniState = WolfAnimateState.Attack; } else { this.hp -= attack; hudtext.Add("-" + attack, Color.red, 0f); StartCoroutine(showBodyRed()); if(this.hp <= 0) { aniState = WolfAnimateState.Death; EnemyFactory._instance.createEnemy(); Destroy(this.gameObject, 2); } else { StartCoroutine(showHittedAnimation()); aniState = WolfAnimateState.Attack; } } }