예제 #1
0
    void Update()
    {
        if (_target == null)
        {
            _animator.SetBool("moving", false);
            return;             // Perhaps walk around aimlessly instead, all zombie-like
        }

        _attackCooldown -= Time.deltaTime;

        if (_state == ZombieState.MovingToWaypoint)
        {
            var nearestWaypoint     = Waypoints.GetNearestWaypoint(transform);
            var directionToWaypoint = (nearestWaypoint - transform.position).normalized;
            MoveInDirection(directionToWaypoint);
            _animator.SetBool("moving", true);
            _animator.SetFloat("move_speed", _speed);

            if (Vector3.Distance(nearestWaypoint, transform.position) < 0.3f)
            {
                _state = ZombieState.MovingToPlayer;
            }
        }
        else if (_state == ZombieState.MovingToPlayer)
        {
            // Euler direction to the player/target
            var directionToPlayer = (_target.transform.position - transform.position).normalized;

            MoveInDirection(directionToPlayer);

            var distanceToPlayer = Vector3.Distance(_target.transform.position, transform.position);

            if (distanceToPlayer < 0.5f)
            {
                _animator.SetBool(_attackType == 0 ? "attacking" : "biting", true);
                _animator.SetBool("moving", false);
                _animator.SetFloat("move_speed", _speed);
            }
            else
            {
                _attackType = UnityEngine.Random.Range(0, 2);
                _animator.SetBool("attacking", false);
                _animator.SetBool("biting", false);
                _animator.SetBool("moving", true);
                _animator.SetFloat("move_speed", _speed);
            }
        }
    }