예제 #1
0
    //private bool hurt = false;

    public virtual void Move()
    {
        distanceToPlayer = Vector3.Distance(transform.position, PlayerController.instance.transform.position);
        if (distanceToPlayer <= followRange)
        {
            if (distanceToPlayer > attackrange)
            {
                speed = Random.Range(0.05f, 0.15f);

                animManager.animationMove(true);
                transform.position = Vector3.MoveTowards(transform.position, PlayerController.instance.plyerHand.transform.position, speed);
                //isAttacking = false;
            }
            else
            {
                if (canAttack)
                {
                    StartCoroutine(inflictdamage());
                }
            }
        }
        else
        {
            dontMove();
        }

        transform.LookAt(PlayerController.instance.playerModelChild.transform.position, Vector3.up);
        transform.rotation = Quaternion.Euler(0f, transform.rotation.eulerAngles.y + rotationgrade, 0f);
    }
예제 #2
0
    // Update is called once per frame
    void Update()
    {
        float distanceToPlayer = Vector3.Distance(transform.position, PlayerController.instance.transform.position);

        switch (currentState)
        {
        case enemyState.idle: anim.animationMove(false);
            if (waitCounter > 0)
            {
                waitCounter -= Time.deltaTime;
            }
            else
            {
                currentState = enemyState.patroll;
                agent.SetDestination(patrollPoints[currentPatrollPoint].transform.position);
            }
            if (distanceToPlayer <= chaseRange)
            {
                currentState = enemyState.chasing;
                anim.animationMove(true);
            }
            break;

        case enemyState.patroll: if (agent.remainingDistance <= .2f)
            {
                currentPatrollPoint++;
                if (currentPatrollPoint >= patrollPoints.Length)
                {
                    currentPatrollPoint = 0;
                }
                currentState = enemyState.idle;
                waitCounter  = waitAtPoint;
            }
            if (distanceToPlayer <= chaseRange)
            {
                currentState = enemyState.chasing;
            }
            anim.animationMove(true); break;

        case enemyState.chasing: agent.SetDestination(PlayerController.instance.transform.position);
            if (distanceToPlayer <= attackRange)
            {
                currentState = enemyState.attack;
                if (haveMultipleAttack)
                {
                    anim.randomAttack();
                }
                else
                {
                    anim.animationAttak();
                }

                anim.animationMove(false);
                agent.velocity  = Vector3.zero;
                agent.isStopped = true;
                attackCounter   = timeBetweenAttacks;
            }
            if (distanceToPlayer > chaseRange)
            {
                currentState   = enemyState.idle;
                waitCounter    = waitAtPoint;
                agent.velocity = Vector3.zero;
                agent.SetDestination(transform.position);
            }
            break;

        case enemyState.attack: transform.LookAt(PlayerController.instance.transform.position);
            transform.rotation = Quaternion.Euler(0, transform.rotation.eulerAngles.y, 0);
            attackCounter     -= Time.deltaTime;
            if (attackCounter <= 0)
            {
                if (distanceToPlayer <= attackRange)
                {
                    if (haveMultipleAttack)
                    {
                        anim.randomAttack();
                        attackCounter = timeBetweenAttacks;
                    }
                    else
                    {
                        anim.animationAttak();
                        attackCounter = timeBetweenAttacks;
                    }
                }
                else
                {
                    currentState    = enemyState.idle;
                    waitCounter     = waitAtPoint;
                    agent.isStopped = false;
                }
            }
            break;
        }
    }