Class InputSystemUIInputModule
Input module that takes its input from input actions.
Inheritance
Inherited Members
Namespace: UnityEngine.InputSystem.UI
Assembly: Unity.InputSystem.dll
Syntax
[HelpURL("https://docs.unity3d.com/Packages/com.unity.inputsystem@1.10/manual/UISupport.html#setting-up-ui-input")]
public class InputSystemUIInputModule : BaseInputModule
Remarks
This UI input module has the advantage over other such modules that it doesn't have to know what devices and types of devices input is coming from. Instead, the actions hide the actual sources of input from the module.
When adding this component from code (such as through GameObject.AddComponent
), the
resulting module will automatically have a set of default input actions assigned to it
(see AssignDefaultActions()).
Properties
actionsAsset
Declaration
public InputActionAsset actionsAsset { get; set; }
Property Value
Type | Description |
---|---|
InputActionAsset |
cancel
An InputAction delivering a float
button value that determines when ICancelHandler
is triggered.
Declaration
public InputActionReference cancel { get; set; }
Property Value
Type | Description |
---|---|
InputActionReference |
Remarks
The events generated from this input will be received by UnityEngine.EventSystems.ICancelHandler.
This action together with move and submit form the sources for navigation-style UI input.
This action should have its type set to Button.
var asset = ScriptableObject.Create<InputActionAsset>();
var map = asset.AddActionMap("UI");
var pointAction = map.AddAction("move");
var submitAction = map.AddAction("submit");
var cancelAction = map.AddAction("cancel");
moveAction.AddBinding("<Gamepad>/*stick");
moveAction.AddBinding("<Gamepad>/dpad");
submitAction.AddBinding("<Gamepad>/buttonSouth");
cancelAction.AddBinding("<Gamepad>/buttonEast");
((InputSystemUIInputModule)EventSystem.current.currentInputModule).move =
InputActionReference.Create(moveAction);
((InputSystemUIInputModule)EventSystem.current.currentInputModule).submit =
InputActionReference.Create(submitAction);
((InputSystemUIInputModule)EventSystem.current.currentInputModule).cancelAction =
InputActionReference.Create(cancelAction);
See Also
cursorLockBehavior
Where to position the pointer when the cursor is locked.
Declaration
public InputSystemUIInputModule.CursorLockBehavior cursorLockBehavior { get; set; }
Property Value
Type | Description |
---|---|
InputSystemUIInputModule.CursorLockBehavior |
Remarks
By default, the pointer is positioned at -1, -1 in screen space when the cursor is locked. This has implications for using ray casters like UnityEngine.EventSystems.PhysicsRaycaster because the raycasts will be sent from the pointer position. By setting the value of cursorLockBehavior to ScreenCenter, the raycasts will be sent from the center of the screen. This is useful when trying to interact with world space UI using the UnityEngine.EventSystems.IPointerEnterHandler and UnityEngine.EventSystems.IPointerExitHandler interfaces when the cursor is locked.
deselectOnBackgroundClick
Whether to clear the current selection when a click happens that does not hit any GameObject
.
Declaration
public bool deselectOnBackgroundClick { get; set; }
Property Value
Type | Description |
---|---|
bool | If true (default), clicking outside of any GameObject will reset the current selection. |
Remarks
By toggling this behavior off, background clicks will keep the current selection. I.e.
EventSystem.currentSelectedGameObject
will not be changed.
leftClick
An InputAction delivering a float
button value that determines
whether the left button of a pointer is pressed.
Declaration
public InputActionReference leftClick { get; set; }
Property Value
Type | Description |
---|---|
InputActionReference |
Remarks
Clicks on this button will use UnityEngine.EventSystems.PointerEventData.InputButton.Left for UnityEngine.EventSystems.PointerEventData.button.
Together with point, rightClick, middleClick, and scrollWheel, this forms the basis for pointer-type UI input.
Note that together with point, this action is necessary for a pointer to be functional. The other clicks and scrollWheel are optional, however.
This action should have its type set to PassThrough and its
expectedControlType set to "Button"
.
var asset = ScriptableObject.Create<InputActionAsset>();
var map = asset.AddActionMap("UI");
var pointAction = map.AddAction("scroll");
var clickAction = map.AddAction("click");
pointAction.AddBinding("<Mouse>/position");
pointAction.AddBinding("<Touchscreen>/touch*/position");
clickAction.AddBinding("<Mouse>/leftButton");
clickAction.AddBinding("<Touchscreen>/touch*/press");
((InputSystemUIInputModule)EventSystem.current.currentInputModule).point =
InputActionReference.Create(pointAction);
((InputSystemUIInputModule)EventSystem.current.currentInputModule).leftClick =
InputActionReference.Create(clickAction);
See Also
middleClick
An InputAction delivering a float
button value that determines
whether the middle button of a pointer is pressed.
Declaration
public InputActionReference middleClick { get; set; }
Property Value
Type | Description |
---|---|
InputActionReference |
Remarks
Clicks on this button will use UnityEngine.EventSystems.PointerEventData.InputButton.Middle for UnityEngine.EventSystems.PointerEventData.button.
Together with leftClick, rightClick, scrollWheel, and point, this forms the basis for pointer-type UI input.
Note that the action is optional. A pointer is fully functional with just point and leftClick alone.
This action should have its type set to PassThrough and its
expectedControlType set to "Button"
.
var asset = ScriptableObject.Create<InputActionAsset>();
var map = asset.AddActionMap("UI");
var pointAction = map.AddAction("scroll");
var leftClickAction = map.AddAction("leftClick");
var middleClickAction = map.AddAction("middleClick");
pointAction.AddBinding("<Mouse>/position");
pointAction.AddBinding("<Touchscreen>/touch*/position");
leftClickAction.AddBinding("<Mouse>/leftButton");
leftClickAction.AddBinding("<Touchscreen>/touch*/press");
middleClickAction.AddBinding("<Mouse>/middleButton");
((InputSystemUIInputModule)EventSystem.current.currentInputModule).point =
InputActionReference.Create(pointAction);
((InputSystemUIInputModule)EventSystem.current.currentInputModule).leftClick =
InputActionReference.Create(leftClickAction);
((InputSystemUIInputModule)EventSystem.current.currentInputModule).middleClick =
InputActionReference.Create(middleClickAction);
See Also
move
An InputAction delivering a Vector2
2D motion vector
used for sending UnityEngine.EventSystems.AxisEventData navigation events.
Declaration
public InputActionReference move { get; set; }
Property Value
Type | Description |
---|---|
InputActionReference |
Remarks
The events generated from this input will be received by UnityEngine.EventSystems.IMoveHandler.OnMove(UnityEngine.EventSystems.AxisEventData).
This action together with submit and cancel form the sources for navigation-style UI input.
This action should have its type set to PassThrough and its
expectedControlType set to "Vector2"
.
var asset = ScriptableObject.Create<InputActionAsset>();
var map = asset.AddActionMap("UI");
var pointAction = map.AddAction("move");
var submitAction = map.AddAction("submit");
var cancelAction = map.AddAction("cancel");
moveAction.AddBinding("<Gamepad>/*stick");
moveAction.AddBinding("<Gamepad>/dpad");
submitAction.AddBinding("<Gamepad>/buttonSouth");
cancelAction.AddBinding("<Gamepad>/buttonEast");
((InputSystemUIInputModule)EventSystem.current.currentInputModule).move =
InputActionReference.Create(moveAction);
((InputSystemUIInputModule)EventSystem.current.currentInputModule).submit =
InputActionReference.Create(submitAction);
((InputSystemUIInputModule)EventSystem.current.currentInputModule).cancelAction =
InputActionReference.Create(cancelAction);
See Also
moveRepeatDelay
Delay in seconds between an initial move action and a repeated move action while move is actuated.
Declaration
public float moveRepeatDelay { get; set; }
Property Value
Type | Description |
---|---|
float |
Remarks
While move is being held down, the input module will first wait for moveRepeatDelay seconds after the first actuation of move and then trigger a move event every moveRepeatRate seconds.
See Also
moveRepeatRate
Delay in seconds between repeated move actions while move is actuated.
Declaration
public float moveRepeatRate { get; set; }
Property Value
Type | Description |
---|---|
float |
Remarks
While move is being held down, the input module will first wait for moveRepeatDelay seconds after the first actuation of move and then trigger a move event every moveRepeatRate seconds.
Note that a maximum of one UnityEngine.EventSystems.AxisEventData will be sent per frame. This means that even if multiple time increments of the repeat delay have passed since the last update, only one move repeat event will be generated.
See Also
point
An InputAction delivering a Vector2 2D screen position used as a cursor for pointing at UI elements.
Declaration
public InputActionReference point { get; set; }
Property Value
Type | Description |
---|---|
InputActionReference |
Remarks
The values read from this action determine UnityEngine.EventSystems.PointerEventData.position and UnityEngine.EventSystems.PointerEventData.delta.
Together with leftClick, rightClick, middleClick, and scrollWheel, this forms the basis for pointer-type UI input.
This action should have its type set to PassThrough and its
expectedControlType set to "Vector2"
.
var asset = ScriptableObject.Create<InputActionAsset>();
var map = asset.AddActionMap("UI");
var pointAction = map.AddAction("Point");
pointAction.AddBinding("<Mouse>/position");
pointAction.AddBinding("<Touchscreen>/touch*/position");
((InputSystemUIInputModule)EventSystem.current.currentInputModule).point =
InputActionReference.Create(pointAction);
See Also
pointerBehavior
How to deal with the presence of pointer-type input from multiple devices.
Declaration
public UIPointerBehavior pointerBehavior { get; set; }
Property Value
Type | Description |
---|---|
UIPointerBehavior |
Remarks
By default, this is set to SingleMouseOrPenButMultiTouchAndTrack which will treat input from Mouse and Pen devices as coming from a single on-screen pointer but will treat input from devices such as XRController and Touchscreen as their own discrete pointers.
The primary effect of this setting is to determine whether the user can concurrently point at more than a single UI element or not. Whenever multiple pointers are allowed, more than one element may have a pointer over it at any one point and thus several elements can be interacted with concurrently.
rightClick
An InputAction delivering a float"
button value that determines
whether the right button of a pointer is pressed.
Declaration
public InputActionReference rightClick { get; set; }
Property Value
Type | Description |
---|---|
InputActionReference |
Remarks
Clicks on this button will use UnityEngine.EventSystems.PointerEventData.InputButton.Right for UnityEngine.EventSystems.PointerEventData.button.
Together with leftClick, middleClick, scrollWheel, and point, this forms the basis for pointer-type UI input.
Note that the action is optional. A pointer is fully functional with just point and leftClick alone.
This action should have its type set to PassThrough and its
expectedControlType set to "Button"
.
var asset = ScriptableObject.Create<InputActionAsset>();
var map = asset.AddActionMap("UI");
var pointAction = map.AddAction("scroll");
var leftClickAction = map.AddAction("leftClick");
var rightClickAction = map.AddAction("rightClick");
pointAction.AddBinding("<Mouse>/position");
pointAction.AddBinding("<Touchscreen>/touch*/position");
leftClickAction.AddBinding("<Mouse>/leftButton");
leftClickAction.AddBinding("<Touchscreen>/touch*/press");
rightClickAction.AddBinding("<Mouse>/rightButton");
((InputSystemUIInputModule)EventSystem.current.currentInputModule).point =
InputActionReference.Create(pointAction);
((InputSystemUIInputModule)EventSystem.current.currentInputModule).leftClick =
InputActionReference.Create(leftClickAction);
((InputSystemUIInputModule)EventSystem.current.currentInputModule).rightClick =
InputActionReference.Create(rightClickAction);
See Also
scrollDeltaPerTick
A multiplier value that allows you to adjust the scroll wheel speed sent to uGUI (Unity UI) components.
Declaration
public float scrollDeltaPerTick { get; set; }
Property Value
Type | Description |
---|---|
float |
Remarks
This value controls the magnitude of the PointerEventData.scrollDelta value, when the scroll wheel is rotated one tick. It acts as a multiplier, so a value of 1 passes through the original value and behaves the same as the legacy Standalone Input Module.
A value larger than one increases the scrolling speed per tick, and a value less than one decreases the speed.
You can set this to a negative value to invert the scroll direction. A value of zero prevents mousewheel scrolling from working at all.
Note: this has no effect on UI Toolkit content, only uGUI components.
scrollWheel
An InputAction delivering a Vector2
scroll wheel value
used for sending UnityEngine.EventSystems.PointerEventData events.
Declaration
public InputActionReference scrollWheel { get; set; }
Property Value
Type | Description |
---|---|
InputActionReference |
Remarks
The values read from this action determine UnityEngine.EventSystems.PointerEventData.scrollDelta.
Together with leftClick, rightClick, middleClick, and point, this forms the basis for pointer-type UI input.
Note that the action is optional. A pointer is fully functional with just point and leftClick alone.
This action should have its type set to PassThrough and its
expectedControlType set to "Vector2"
.
var asset = ScriptableObject.Create<InputActionAsset>();
var map = asset.AddActionMap("UI");
var pointAction = map.AddAction("scroll");
var scrollAction = map.AddAction("scroll");
pointAction.AddBinding("<Mouse>/position");
pointAction.AddBinding("<Touchscreen>/touch*/position");
scrollAction.AddBinding("<Mouse>/scroll");
((InputSystemUIInputModule)EventSystem.current.currentInputModule).point =
InputActionReference.Create(pointAction);
((InputSystemUIInputModule)EventSystem.current.currentInputModule).scrollWheel =
InputActionReference.Create(scrollAction);
See Also
submit
An InputAction delivering a float
button value that determines when ISubmitHandler
is triggered.
Declaration
public InputActionReference submit { get; set; }
Property Value
Type | Description |
---|---|
InputActionReference |
Remarks
The events generated from this input will be received by UnityEngine.EventSystems.ISubmitHandler.
This action together with move and cancel form the sources for navigation-style UI input.
This action should have its type set to Button.
var asset = ScriptableObject.Create<InputActionAsset>();
var map = asset.AddActionMap("UI");
var pointAction = map.AddAction("move");
var submitAction = map.AddAction("submit");
var cancelAction = map.AddAction("cancel");
moveAction.AddBinding("<Gamepad>/*stick");
moveAction.AddBinding("<Gamepad>/dpad");
submitAction.AddBinding("<Gamepad>/buttonSouth");
cancelAction.AddBinding("<Gamepad>/buttonEast");
((InputSystemUIInputModule)EventSystem.current.currentInputModule).move =
InputActionReference.Create(moveAction);
((InputSystemUIInputModule)EventSystem.current.currentInputModule).submit =
InputActionReference.Create(submitAction);
((InputSystemUIInputModule)EventSystem.current.currentInputModule).cancelAction =
InputActionReference.Create(cancelAction);
See Also
trackedDeviceDragThresholdMultiplier
Scales the drag threshold of EventSystem
for tracked devices to make selection easier.
Declaration
public float trackedDeviceDragThresholdMultiplier { get; set; }
Property Value
Type | Description |
---|---|
float |
trackedDeviceOrientation
An InputAction delivering a Quaternion
value reflecting the orientation of TrackedDevices.
In combination with trackedDevicePosition, this is used to determine the transform of tracked devices from which
to raycast into the UI scene.
Declaration
public InputActionReference trackedDeviceOrientation { get; set; }
Property Value
Type | Description |
---|---|
InputActionReference |
Remarks
trackedDeviceOrientation and trackedDevicePosition together replace point for UI input from TrackedDevice. Other than that, UI input for tracked devices is no different from "normal" pointer-type input. This means that leftClick, rightClick, middleClick, and scrollWheel can all be used for tracked device input like for regular pointer input.
This action should have its type set to PassThrough and its
expectedControlType set to "Quaternion"
.
var asset = ScriptableObject.Create<InputActionAsset>();
var map = asset.AddActionMap("UI");
var positionAction = map.AddAction("position");
var orientationAction = map.AddAction("orientation");
var clickAction = map.AddAction("click");
positionAction.AddBinding("<TrackedDevice>/devicePosition");
orientationAction.AddBinding("<TrackedDevice>/deviceRotation");
clickAction.AddBinding("<TrackedDevice>/trigger");
((InputSystemUIInputModule)EventSystem.current.currentInputModule).trackedDevicePosition =
InputActionReference.Create(positionAction);
((InputSystemUIInputModule)EventSystem.current.currentInputModule).trackedDeviceOrientation =
InputActionReference.Create(orientationAction);
((InputSystemUIInputModule)EventSystem.current.currentInputModule).leftClick =
InputActionReference.Create(clickAction);
See Also
trackedDevicePosition
An InputAction delivering a Vector3
value reflecting the position of TrackedDevices.
In combination with trackedDeviceOrientation, this is used to determine the transform of tracked devices from which
to raycast into the UI scene.
Declaration
public InputActionReference trackedDevicePosition { get; set; }
Property Value
Type | Description |
---|---|
InputActionReference |
Remarks
trackedDeviceOrientation and trackedDevicePosition together replace point for UI input from TrackedDevice. Other than that, UI input for tracked devices is no different from "normal" pointer-type input. This means that leftClick, rightClick, middleClick, and scrollWheel can all be used for tracked device input like for regular pointer input.
This action should have its type set to PassThrough and its
expectedControlType set to "Vector3"
.
var asset = ScriptableObject.Create<InputActionAsset>();
var map = asset.AddActionMap("UI");
var positionAction = map.AddAction("position");
var orientationAction = map.AddAction("orientation");
var clickAction = map.AddAction("click");
positionAction.AddBinding("<TrackedDevice>/devicePosition");
orientationAction.AddBinding("<TrackedDevice>/deviceRotation");
clickAction.AddBinding("<TrackedDevice>/trigger");
((InputSystemUIInputModule)EventSystem.current.currentInputModule).trackedDevicePosition =
InputActionReference.Create(positionAction);
((InputSystemUIInputModule)EventSystem.current.currentInputModule).trackedDeviceOrientation =
InputActionReference.Create(orientationAction);
((InputSystemUIInputModule)EventSystem.current.currentInputModule).leftClick =
InputActionReference.Create(clickAction);
See Also
xrTrackingOrigin
A Transform representing the real world origin for tracking devices. This is used to convert real world positions and rotations for Tracked pointers into Unity's global space. When using the XR Interaction Toolkit, this should be pointing to the XR Rig's Transform.
Declaration
public Transform xrTrackingOrigin { get; set; }
Property Value
Type | Description |
---|---|
Transform |
Remarks
This will transform all tracked pointers. If unset, or set to null, the Unity world origin will be used as the basis for all tracked positions and rotations.
Methods
ActivateModule()
Called by EventSystem
when the input module is made current.
Declaration
public override void ActivateModule()
Overrides
AssignDefaultActions()
Declaration
public void AssignDefaultActions()
Awake()
Declaration
protected override void Awake()
Overrides
GetLastRaycastResult(int)
Returns the most recent raycast information for a given pointer or touch.
Declaration
public RaycastResult GetLastRaycastResult(int pointerOrTouchId)
Parameters
Type | Name | Description |
---|---|---|
int | pointerOrTouchId | ID of the pointer or touch. Meaning this should correspond to either
|
Returns
Type | Description |
---|---|
RaycastResult | The most recent raycast information. |
Remarks
This method is for the most recent raycast, but depending on when it's called is not guaranteed to be for the current frame.
This method can be used to determine raycast distances and hit information for visualization.
Use UnityEngine.EventSystems.RaycastResult.isValid to determine if pointer hit anything.
See Also
IsPointerOverGameObject(int)
Check whether the given pointer or touch is currently hovering over a GameObject
.
Declaration
public override bool IsPointerOverGameObject(int pointerOrTouchId)
Parameters
Type | Name | Description |
---|---|---|
int | pointerOrTouchId | ID of the pointer or touch. Meaning this should correspond to either
|
Returns
Type | Description |
---|---|
bool | True if the given pointer is currently hovering over a |
Overrides
Remarks
The result is true if the given pointer has caused an IPointerEnter
event to be sent to a
GameObject
.
This method can be invoked via EventSystem.current.IsPointerOverGameObject
.
Be aware that this method relies on state set up during UI event processing that happens in EventSystem.Update
,
that is, as part of MonoBehaviour
updates. This step happens after input processing.
Thus, calling this method earlier than that in the frame will make it poll state from last frame.
Calling this method from within an InputAction callback (such as performed) will result in a warning. See the "UI vs Game Input" sample shipped with the Input System package for how to deal with this fact.
// In general, the pointer ID corresponds to the device ID:
EventSystem.current.IsPointerOverGameObject(XRController.leftHand.deviceId);
EventSystem.current.IsPointerOverGameObject(Mouse.current.deviceId);
// For touch input, pass the ID of a touch:
EventSystem.current.IsPointerOverGameObject(Touchscreen.primaryTouch.touchId.ReadValue());
// But can also pass the ID of the entire Touchscreen in which case the result
// is true if any touch is over a GameObject:
EventSystem.current.IsPointerOverGameObject(Touchscreen.current.deviceId);
// Finally, any negative value will be interpreted as "any pointer" and will
// return true if any one pointer is currently over a GameObject:
EventSystem.current.IsPointerOverGameObject(-1);
EventSystem.current.IsPointerOverGameObject(); // Equivalent.
See Also
OnDestroy()
Declaration
protected override void OnDestroy()
Overrides
OnDisable()
Declaration
protected override void OnDisable()
Overrides
OnEnable()
Declaration
protected override void OnEnable()
Overrides
Process()
Process the current tick for the module.
Declaration
public override void Process()
Overrides
Reset()
Declaration
protected override void Reset()
Overrides
UnassignActions()
Remove all action assignments, that is actionsAsset as well as all individual actions such as leftClick.
Declaration
public void UnassignActions()
Remarks
If the current actions were enabled by the UI input module, they will be disabled in the process.