// Update is called once per frame void Update() { target.text = ""; if (interactablesInRange.Count == 0) { return; } float minDistance = float.MaxValue; BaseInteractable closest = null; foreach (BaseInteractable interactable in interactablesInRange) { var center = interactable.center != null ? interactable.center.position : interactable.transform.position; var relativePos = this.transform.InverseTransformPoint(center); if (relativePos.z < 0) { continue; } float angle = Vector3.Angle(Vector3.forward, relativePos.normalized); this.debug = angle; if (angle > maxInteractAngle) { continue; } if (angle < minDistance) { minDistance = angle; closest = interactable; } } if (closest == null) { return; } target.text = closest.gameObject.name; if (!Input.GetButtonDown("Interact")) { return; } closest.Interact(inventory, miniGameManager); }
void Update() { if (FindClosestInteractable(out var foundInteractable)) { if (foundInteractable != _currentBaseInteractable) { SwitchToNewInteractable(foundInteractable); } } else { if (_currentBaseInteractable != null) { SwitchToNewInteractable(null); } } if (Input.GetKeyDown(KeyCode.Space) && _currentBaseInteractable != null) { _currentBaseInteractable.Interact(); } }