Exemplo n.º 1
0
    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;
        }

    }
Exemplo n.º 2
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;

            }
        }
    }