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); } } }