Propagating Events in Unity

By default, events are “consumed” by receivers so they would not “propagate” or “bubble” to other objects, in those cases you can attach this code to any object you want to pass events to others. (Make sure you change events you want to bubble in the handlers)

private void Bubble<T>(PointerEventData eventData, ExecuteEvents.EventFunction<T> eventFunction) where T : IEventSystemHandler
        {
            var allRaycasted = new List<RaycastResult>();
            EventSystem.current.RaycastAll(eventData, allRaycasted);
            foreach (var raycasted in allRaycasted)
            {
                if (raycasted.gameObject == gameObject)
                {
                    continue;
                }
                ExecuteEvents.Execute(raycasted.gameObject, eventData, eventFunction);
            }
        }

        void IDragHandler.OnDrag(PointerEventData eventData)
        {
            Bubble(eventData, ExecuteEvents.dragHandler);
        }

        void IPointerDownHandler.OnPointerDown(PointerEventData eventData)
        {
            m_startPos = joystick.transform.position;
            joystick.transform.position = eventData.position;

            Bubble(eventData, ExecuteEvents.pointerDownHandler);
        }

        void IPointerUpHandler.OnPointerUp(PointerEventData eventData)
        {
            print("up in Mover");
            Bubble(eventData, ExecuteEvents.pointerUpHandler);
            joystick.transform.position = m_startPos;
        }