// Start is called before the first frame update void Start() { state = gebulinState.Idle; //初始化初始状态 animall_now = animall_idle; //初始化初始动画 aniname_attack_now = aniname_normalattack1; //初始化攻击动画 cc = this.GetComponent <CharacterController>(); player = GameObject.FindGameObjectWithTag("Player"); //获取玩家对象 target = player.transform; //获取玩家的位置 animation = GetComponent <Animation>(); addAnimationEvent(aniname_normalattack1, "controlHP1"); addAnimationEvent(aniname_normalattack2, "controlHP2"); addAnimationEvent(aniname_normalattack3, "controlHP3"); addAnimationEvent(aniname_normalattack4, "controlHP4"); addAnimationEvent(aniname_crazyattack, "controlHP5"); c = GetComponent <CharacterAttackSystem>(); }
// Update is called once per frame void Update() { float distance = Vector3.Distance(target.position, transform.position); //计算玩家与野怪的距离 if (distance <= maxDistance) //判断玩家是否在野怪的攻击范围内 { state = gebulinState.Attack; } if (distance <= minDistance) { //始终朝向玩家 transform.LookAt(target); } if (state == gebulinState.Attack) { AutoAttack(); //野怪执行攻击 } else if (state == gebulinState.Death) //如果野怪的状态是死亡,则播放死亡动画 { animation.CrossFade(animall_death); Destroy(this.gameObject, 2f); //销毁野怪 } else if (state == gebulinState.Gethit) //如果野怪的状态是受到伤害状态,则播放受到伤害动画 { animation.CrossFade(animall_gethit); } else//野怪处于其他状态 { animation.CrossFade(animall_now);//播放野怪当前动画 if (animall_now == animall_walk) { cc.SimpleMove(transform.forward * speed); } timer += Time.deltaTime;//计时器 if (timer >= time) { timer = 0; RandomState();//随机产生行走和静立状态 } } if (hp <= 0) { state = gebulinState.Death; } }
public void TakeDamage(int attack)//受到伤害 { if (state == gebulinState.Death) { return; } float value = Random.Range(0f, 1f); if (value < miss_rate)//Miss效果 { //AudioSource.PlayClipAtPoint(miss_sound, transform.position); } else { state = gebulinState.Gethit; //血量减少的同时,血条也减少 this.hp -= attack; Slider_c.instance.SetValue(attack); //显示受到的伤害数值 GameObject.Find("Canvas").GetComponent <HudText>().HUD(hp); //野怪受到伤害身体变红 StartCoroutine(ShowBodyRed()); } }