private void LookForInteractive()
    {
        // Raycast ahead of camera [actionDistance] units to find interactive objects
        RaycastHit actionHit;

        Physics.Raycast(
            new Vector3(
                Camera.main.transform.position.x,
                Camera.main.transform.position.y,
                Camera.main.transform.position.z
                ),
            Camera.main.transform.forward,
            out actionHit,
            actionDistance,
            actionMask
            );

        // Debug draw look vector
        if (displayActionRaycast)
        {
            Debug.DrawRay(
                new Vector3(
                    Camera.main.transform.position.x,
                    Camera.main.transform.position.y,
                    Camera.main.transform.position.z
                    ),
                Camera.main.transform.forward * actionDistance,
                Color.green
                );
        }

        // If an interactive object is found: make UI visible, grab object's interactive script, set UI text
        if (actionHit.collider != null)
        {
            if (visibleObject == null)
            {
                visibleObject = actionHit.collider.gameObject.GetComponent <IInteractive>();
            }

            if (!string.IsNullOrEmpty(visibleObject.Info()))
            {
                isViewingAction = true;

                actionText.text = visibleObject.Info();
            }
            else
            {
                isViewingAction = false;
            }
        }
        // Else make UI invisible and set object's interactive script to null
        else
        {
            isViewingAction = false;
            visibleObject   = null;
        }
    }