private void FindWanderTarget() { float range = Random.Range(0f, wander_range); float angle = Random.Range(0f, 360f) * Mathf.Deg2Rad; Vector3 spos = wander == WanderBehavior.WanderFar ? transform.position : start_pos; Vector3 pos = spos + new Vector3(Mathf.Cos(angle), 0f, Mathf.Sin(angle)) * range; wander_target = pos; Lure lure = Lure.GetNearestInRange(transform.position); if (lure != null) { Vector3 dir = lure.transform.position - transform.position; dir.y = 0f; Vector3 center = transform.position + dir.normalized * dir.magnitude * 0.5f; if (lure_interest < 4f) { center = lure.transform.position; } float range2 = Mathf.Clamp(lure_interest, 1f, wander_range); Vector3 pos2 = center + new Vector3(Mathf.Cos(angle), 0f, Mathf.Sin(angle)) * range2; wander_target = pos2; lure_interest = lure_interest * 0.5f; if (lure_interest <= 0.2f) { lure_interest = 8f; } } }
public static Lure GetNearest(Vector3 pos, float range = 999f) { Lure nearest = null; float min_dist = range; foreach (Lure lure in lure_list) { float dist = (lure.transform.position - pos).magnitude; if (dist < min_dist) { min_dist = dist; nearest = lure; } } return(nearest); }