5 [SerializeField]
private float triggerDistance = 2.0f;
6 [SerializeField]
private float evadeDistance = 3.0f;
7 [SerializeField]
private float movementSpeed = 3.0f;
9 private Vector3 evadeDestination = Vector3.zero;
10 private Vector3 evadeDirection = Vector3.zero;
11 private bool isEvading =
false;
13 public void SetTriggerDistance(
float triggerDistance) { this.triggerDistance = triggerDistance; }
16 public void SetEvadeDistance(
float evadeDistance) { this.evadeDistance = evadeDistance; }
19 public void SetMovementSpeed(
float movementSpeed) { this.movementSpeed = movementSpeed; }
22 private void Update() {
31 if (
target ==
null)
return;
32 if (triggerDistance * triggerDistance < (transform.position -
target.position).sqrMagnitude) {
return; }
34 Vector3 thisPosition =
new Vector3(transform.position.x, 0.0f, transform.position.z);
35 Vector3 targetPosition =
new Vector3(
target.position.x, 0.0f,
target.position.z);
36 Vector3 targetToThis = thisPosition - targetPosition;
38 evadeDirection = (targetToThis.sqrMagnitude < Mathf.Epsilon) ? Vector3.forward : targetToThis.normalized;
39 evadeDestination = transform.position + evadeDirection * evadeDistance;
43 private void Evade() {
44 Vector3 thisToDestination = evadeDestination - transform.position;
45 if (thisToDestination.sqrMagnitude < 0.1f) {
50 transform.LookAt(transform.position + evadeDirection);
51 transform.Translate(thisToDestination.normalized * movementSpeed * Time.deltaTime, Space.World);
float GetTriggerDistance()
void SetMovementSpeed(float movementSpeed)
void SetEvadeDistance(float evadeDistance)
void SetTriggerDistance(float triggerDistance)