void Update()
    {
        // PROCESS INTERACTIVE OBJECTS
        // Is the crosshair over a usuable item or descriptive item...first get ray from centre of screen
        var ray = _camera.ScreenPointToRay(new Vector3(Screen.width / 2, Screen.height / 2, 0));

        // Cast Ray and collect ALL hits
        var hits = Physics.RaycastAll(ray, 5, _interactiveMask | _backpackMask);

        // Process the hits for the one with the highest priority
        if (hits.Length > 0)
        {
            // Used to record the index of the highest priority
            int             highestPriority = int.MinValue;
            InteractiveItem priorityObject  = null;

            // Iterate through each hit
            foreach (var hit in hits)
            {
                // Fetch its InteractiveItem script from the database
                InteractiveItem interactiveObject = _gameSceneManager.GetInteractiveItem(hit.collider.GetInstanceID());

                // If this is the highest priority object so far then remember it
                if (interactiveObject != null && interactiveObject.Priority > highestPriority)
                {
                    priorityObject  = interactiveObject;
                    highestPriority = priorityObject.Priority;
                }
            }

            if (priorityObject != null)
            {
                if (priorityObject.activationType == ActivationType.MouseButtonPressed && Input.GetMouseButton(0) ||
                    priorityObject.activationType == ActivationType.MouseButtonDown && Input.GetMouseButtonDown(0))
                {
                    priorityObject.Drag(this);
                }
            }
        }

        if (SelectedDraggableItem != null)
        {
            SelectedDraggableItem.Drag(this);
            if (Input.GetMouseButtonUp(0))
            {
                SelectedDraggableItem.Drop();
                SelectedDraggableItem = null;
            }
        }

        if (SelectedStorageItem != null && Input.GetMouseButtonUp(0))
        {
            SelectedStorageItem.Drop();
            SelectedStorageItem = null;
        }
    }
    public virtual CollectableItem Drop(Vector3 position)
    {
        if (CollectableItem != null)
        {
            CollectableItem.transform.position = position;
            CollectableItem.Drop();
            return(CollectableItem);
        }

        return(null);
    }