void Update() { floorPosition = new Vector3(transform.position.x, 0.0f, transform.position.z); if(interactables.Count > 0) { Vector3 interactableFloorPosition = Vector3.zero; foreach(Interactable i in interactables) { interactableFloorPosition = new Vector3(i.transform.position.x, 0.0f, i.transform.position.z); i.DistanceToPlayer = (interactableFloorPosition - floorPosition).magnitude; } // Get nearest interactable nearestInteractable = interactables.OrderBy(o=>o.DistanceToPlayer).ToList()[0]; // If player encountered a new nearest interactable if(nearestInteractable != prevNearestInteractable) { nearestInteractable.SetNearestInteractable(); if(prevNearestInteractable != null) { prevNearestInteractable.UnsetNearestInteractable(); } } } else { nearestInteractable = null; if(nearestInteractable != prevNearestInteractable) { if(prevNearestInteractable != null) { prevNearestInteractable.UnsetNearestInteractable(); } } } if(nearestInteractable != null) { nearestInteractable.HandleUse(); } prevNearestInteractable = nearestInteractable; #if UNITY_EDITOR if(nearestInteractable != null) { Debug.DrawLine(transform.position, nearestInteractable.gameObject.transform.position, Color.white); } #endif }