Esempio n. 1
0
    // 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>();
    }
Esempio n. 2
0
    // 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;
        }
    }
Esempio n. 3
0
    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());
        }
    }