private T GetClosest <T>(Collider2D[] buffer, LayerMask layerMask) { int count = Physics2D.OverlapBoxNonAlloc(InteractiveArea.transform.position, InteractiveArea.size, 360, buffer, layerMask); ClosestObject <T> closest = new ClosestObject <T> { angle = 360 }; for (int i = 0; i < count; ++i) { if (InteractablesBuffer[i] == null) { continue; } Transform found = InteractablesBuffer[i].transform; Vector3 facingdir = movement.GetFacing(); float angle = Vector2.Angle(facingdir, (found.position - transform.position).normalized); if (angle > 45f || angle > closest.angle) { continue; } closest.angle = angle; closest.obj = found.GetComponent <T>(); } return(closest.obj); }
private void Start() { instance = instance ?? this; if (fromGameobject == null) { fromGameobject = GameObject.FindGameObjectWithTag("Player"); } instance = instance ?? this; }
void CheckForVisiblePlayers() { Transform[] targets = PlayersInSight(stats.fieldOfView, transform); ClosestObject closest = FindClosest(targets); if (closest.closest != null) { Transform closestPlayer = closest.closest.transform; if (closestPlayer != null) { pathFindState = PathFindState.Following; follow.target = closestPlayer; } } }