private void Start()
    {
        // Convert the struct array into a dictionary, with the keywords and the methods as the values.
        // This helps easily link the pointer mode to the UnityEvent to be invoked.
        int pointerModesCount = pointerModes.Length;

        for (int index = 0; index < pointerModesCount; index++)
        {
            PointerModeAndResponse pointerModeAndResponse = pointerModes[index];
            if (_pointerResponses.ContainsKey(pointerModeAndResponse.Mode))
            {
                Debug.LogFormat(LogType.Error, LogOption.NoStacktrace, null, $"Duplicate pointer mode \'{pointerModeAndResponse.Mode}\' specified in \'{gameObject.name}\'.");
            }
            else
            {
                _pointerResponses.Add(pointerModeAndResponse.Mode, pointerModeAndResponse);
            }
        }

        // Listen for mode changes
        AppServices.PointerStateService.ModeChanged += PointerStateService_ModeChanged;

        // Notify listeners of initial deactivated state
        for (int i = 0; i < (int)PointerMode.Count; i++)
        {
            PointerMode mode = (PointerMode)i;
            if (mode != AppServices.PointerStateService.Mode)
            {
                HandleDisabledMode(mode, null);
            }
        }

        // Notify listeners of initial activated state
        HandleEnabledMode(AppServices.PointerStateService.Mode, AppServices.PointerStateService.ModeData);
    }
    private void HandleDisabledMode(PointerMode mode, object modeData)
    {
        PointerModeAndResponse response = default;

        if (_pointerResponses.TryGetValue(mode, out response))
        {
            response.Disabled?.Invoke(mode, modeData);
        }
    }
    private void HandleClick(MixedRealityPointerEventData eventData)
    {
        PointerModeAndResponse response = default;

        if (_pointerResponses.TryGetValue(AppServices.PointerStateService.Mode, out response))
        {
            response.Clicked?.Invoke(eventData, AppServices.PointerStateService.ModeData);
        }
    }