Пример #1
0
    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);
                    }
                }
            }
        }
    }
Пример #2
0
    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);
            }
        }
    }