Exemple #1
0
    private void SetState(State state)
    {
        if (_state != state)
        {
            _state = state;
            switch (state)
            {
            case State.Idle:
                walkAndJump.SetWalkSpeed(0.8f);
                break;

            case State.Chase:
                walkAndJump.SetWalkSpeed(runSpeed);
                isWandering = false;
                //Debug.Log("false");
                break;
            }
            animator.SetInteger("State", (int)state);
        }
    }
Exemple #2
0
    void Update()
    {
        if (!org.alive)
        {
            return;
        }
        TargetUpdate();
        Move();
        //ctrl.isTrigger = true;

        isInRange = false;

        if (_state == State.Idle)
        {
            walkAndJump.SetWalkSpeed(0.8f);
            if (isWandering == false)
            {
                StartCoroutine(Patrolling());
            }
        }

        if (targetlist.Count > 0)
        {
            //RaycastHit[] hits = Physics.RaycastAll(_tr.position, _tr.forward, 2f).OrderBy(h=>h.distance).ToArray();
            var hits = Physics.OverlapSphere(_tr.position, 2.5f);

            foreach (var hit in hits)
            {
                if ((hit.gameObject != gameObject) && (hit.gameObject.layer == 9))
                {
                    if ((hit.gameObject.tag == "Player") || (hit.gameObject.tag == "Life"))
                    {
                        isInRange  = true;
                        mainTarget = hit.gameObject;
                        StopCoroutine(Patrolling());
                        isWandering = false;
                        _state      = State.Run;
                        animator.SetInteger("State", 1);
                    }
                }
            }

            if ((_state == State.Run) && (mainTarget != null))
            {
                var relPos = mainTarget.transform.position - transform.position;
                walkAndJump.SetWalkSpeed(runSpeed);
                if (relPos.x < 0f)
                {
                    movementFlag = 2;
                }
                else if (relPos.x > 0f)
                {
                    movementFlag = 1;
                }

                if ((isInRange == false) && ((relPos.x > 3f) || (relPos.x < -3f)))
                {
                    mainTarget = null;
                    _state     = State.Idle;
                    animator.SetInteger("State", 0);
                }
            }
        }
        else
        {
            _state = State.Idle;
        }
    }