A new Radial Menu can be created by activating the MainRadialMenu module and casting the returned object to W_ MainRadialMenu widget and accessing the Menu variable.
The currently opened Radial Menu can be accessed by getting the Window Root from the active GUI Module.
The Interaction Radial Menu is created by the InteractionTimer event in the Interact Event Graph in the FunCombat_PlayerController . Existing entries can be modified, and new entries can be added directly from that event, or by events bound to SignalInteractionRadialMenuOpened which provides a pointer to the root Radial Menu, as well as a pointer to Target Object.
The whole submenu can be quickly created based on the predefined table with the PopulateRadialMenu function (or PopulateRadialMenu when starting from the root menu). The payload object will be used as a User object for each created entry. Bindings to SignalClicked can be provided separately for each entry.
The predefined table must use FRadialMenuTableRow as a base struct. Examples of tables used to create radial submenus can be found in /Game/UI/RadialMenus/.
Alternatively, AddSubItem ( AddItem when starting from the root menu) can be used to add a single new entry.
Please note that the Icon parameter can accept any UObject, but the icon will be properly set up only if provided Icon is UTexture2D, UTexture2DDynamic, or UMaterialInterface.
Radial menu entries can be accessed using their indexes, as well as their unique user tags.
Please note that when entry is added by a call to AddSubItem (or AddItem ) the User Tag will be set to the untranslated Label Text . Most of the base game entries can be accessed this way, except for the Behavior submenu for followers, for which the majority of the User Tags is defined in the data tables in the /Game/UI/RadialMenus/ directory.
After obtaining pointer to entry, all it’s attributes can be easily accessed and changed:
It is also possible to override functions bound to SignalClicked for existing entries:
Please note that the bound function to SignalClicked will not be called if the owner Entry is owning any subentries and clicking on that entry will always open a lower-level submenu.
Existing entries can be also removed:
The AddRadialMenuEntries_Behavior function in the FunCombat_PlayerController is a good example using most of described here manipulations on the Radial Menu.