protected override void MoveTowardsTarget() { float sqrDist = GetTargetSquareDistance(); if (sqrDist <= HoldRange * HoldRange) { _engaging = false; } if (sqrDist >= ReengageRange * ReengageRange) { _engaging = true; } if (_engaging) { base.MoveTowardsTarget(); } else { Vector3 local = GetTargetLocalPosition(); float angle = Mathf.DeltaAngle(transform.eulerAngles.y, Mathf.Atan2(local.x, local.z) * Mathf.Rad2Deg - 180); float speed = 1f; Controllable.Accelerate(speed); SmoothTurnTowardsAngle(angle); } }
protected virtual void MoveAlongWaypoints() { if (_currentWaypoint) { Controllable.Accelerate(1f); float angle = Vector3.SignedAngle(transform.forward, _currentWaypoint.OutgoingVector, Vector3.up); SmoothTurnTowardsAngle(angle); } }
protected virtual void MoveTowardsTarget() { Vector3 local = GetTargetLocalPosition(); float angle = Mathf.DeltaAngle(transform.eulerAngles.y, Mathf.Atan2(local.x, local.z) * Mathf.Rad2Deg); float speed = 1f; if (local.sqrMagnitude < HoldRange * HoldRange) { speed = 0f; } Controllable.Accelerate(speed); SmoothTurnTowardsAngle(angle); }
protected override void MoveAlongWaypoints() { Controllable.Accelerate(0); Controllable.Turn(0); }