void CheckPlayerInput() { if (_itemsToDetect != null && _itemsToDetect.Count > 0) { if (Input.GetButtonDown(buttonInteract) && Time.timeScale > 0) { //interact sound List <GameObject> itemsToInteract = new List <GameObject>(); foreach (GameObject item in _itemsToDetect) { itemsToInteract.Add(item); } foreach (GameObject interactableObject in itemsToInteract) { ObjectInteractable_Script interactable = interactableObject.GetComponent <ObjectInteractable_Script>(); if (interactable != null) { interactable.Interact(); _itemsToDetect.Remove(interactableObject); } } } } }
void DetectInteractableObjects() { _checkItemCurrentTimer += Time.deltaTime; if (_checkItemCurrentTimer >= _checkItemTimer) { Collider[] colliders = Physics.OverlapSphere(transform.position, _detectRadius, layerToDetect); foreach (Collider collider in colliders) { if (isInLineOfSight(collider.transform)) { if (canSeeObject(collider.transform)) { ObjectInteractable_Script interactable = collider.gameObject.GetComponent <ObjectInteractable_Script>(); if (interactable != null && !interactable.isInteracted) { if (!_itemsToDetect.Contains(collider.gameObject)) { _itemsToDetect.Add(collider.gameObject); } } } } } if (_itemsToDetect.Count == 0) { return; } List <GameObject> itemsToBeDeleted = new List <GameObject>(); /// Check the items in the list after the player is not within detect radius foreach (GameObject item in _itemsToDetect) { if (Vector3.Distance(transform.position, item.transform.position) > _detectRadius) { itemsToBeDeleted.Add(item); } } foreach (GameObject item in itemsToBeDeleted) { _itemsToDetect.Remove(item); } } }