Class TwoModifiersComposite
A binding with two additional modifiers modifier. The bound controls only trigger when both modifiers are pressed.
Inherited Members
Namespace: UnityEngine .InputSystem .Composites
Assembly: Unity.InputSystem.dll
Syntax
[DisplayStringFormat("{modifier1}+{modifier2}+{binding}")]
public class TwoModifiersComposite : InputBindingComposite
Remarks
This composite can be used to require two buttons to be held in order to "activate" another binding. This is most commonly used on keyboards to require two of the modifier keys (shift, ctrl, or alt) to be held in combination with another control, e.g. "SHIFT+CTRL+1".
// Create a button action that triggers when SHIFT+CTRL+1
// is pressed on the keyboard.
var action = new InputAction(type: InputActionType.Button);
action.AddCompositeBinding("TwoModifiers")
.With("Modifier", "<Keyboard>/ctrl")
.With("Modifier", "<Keyboard>/shift")
.With("Binding", "<Keyboard>/1")
However, this can also be used to "gate" other types of controls. For example, a "look"
action could be bound to mouse delta such that the ctrl
var action = new InputAction();
action.AddCompositeBinding("TwoModifiers")
.With("Modifier1", "<Keyboard>/ctrl")
.With("Modifier2", "<Keyboard>/shift")
.With("Binding", "<Mouse>/delta");
Fields
binding
Binding for the control that is gated by modifier1 and modifier2. The composite will assume the value of this button while both of the modifiers are pressed.
Declaration
public int binding
Field Value
Type | Description |
---|---|
int | Part index to use with Read |
Remarks
This property is automatically assigned by the input system.
See Also
modifier1
Binding for the first button that acts as a modifier, e.g. <Keyboard/leftCtrl
.
Declaration
public int modifier1
Field Value
Type | Description |
---|---|
int | Part index to use with Read |
Remarks
This property is automatically assigned by the input system.
See Also
modifier2
Binding for the second button that acts as a modifier, e.g. <Keyboard/leftCtrl
.
Declaration
public int modifier2
Field Value
Type | Description |
---|---|
int | Part index to use with Read |
Remarks
This property is automatically assigned by the input system.
See Also
modifiersOrder
If set to Ordered
or Unordered
, the built-in logic to determine if modifiers need to be pressed first is overridden.
Declaration
[Tooltip("By default it follows the Input Consumption setting to determine if the modifers keys need to be pressed first.")]
public TwoModifiersComposite.ModifiersOrder modifiersOrder
Field Value
Type | Description |
---|---|
Two |
Remarks
By default, if the setting shortcutCtrl+Shift+B
, the ctrl
and shift
keys have to be pressed, in any order,
before pressing the B
key. This is the behavior usually expected with keyboard shortcuts.
If the setting shortcut
This field allows you to explicitly override this default inference and make the order mandatory or make it so that regardless of what binding
is bound to, any press sequence is acceptable. For the example binding to Ctrl+Shift+B
, it would mean that pressing
B
and only then pressing Ctrl
and Shift
will still trigger the binding.
See Also
Properties
valueSizeInBytes
Size of the largest value that may be read from the controls bound to binding.
Declaration
public override int valueSizeInBytes { get; }
Property Value
Type | Description |
---|---|
int |
Overrides
See Also
valueType
Type of values read from controls bound to binding.
Declaration
public override Type valueType { get; }
Property Value
Type | Description |
---|---|
Type |
Overrides
See Also
Methods
EvaluateMagnitude(ref InputBindingCompositeContext)
Determine the current level of actuation of the composite.
Declaration
public override float EvaluateMagnitude(ref InputBindingCompositeContext context)
Parameters
Type | Name | Description |
---|---|---|
Input |
context | Callback context for the binding composite. Use this to access the values supplied by part bindings. |
Returns
Type | Description |
---|---|
float |
Overrides
Remarks
This method by default returns -1, meaning that the composite does not support magnitudes. You can override the method to add support for magnitudes.
See Evaluate
See Also
FinishSetup(ref InputBindingCompositeContext)
Called after binding resolution for an Input
Declaration
protected override void FinishSetup(ref InputBindingCompositeContext context)
Parameters
Type | Name | Description |
---|---|---|
Input |
context |
Overrides
Remarks
Some composites do not have predetermine value types. Two examples of this are
One"binding"
part that can be bound to arbitrary controls. This means that the
value type of these bindings can only be determined at runtime.
Overriding this method allows accessing the actual controls bound to each part at runtime.
[InputControl] public int binding;
protected override void FinishSetup(ref InputBindingContext context)
{
// Get all controls bound to the 'binding' part.
var controls = context.controls
.Where(x => x.part == binding)
.Select(x => x.control);
}</code></pre></example>
See Also
ReadValue(ref InputBindingCompositeContext, void*, int)
Read a value from the composite without having to know the value type (unlike
Read
Declaration
public override void ReadValue(ref InputBindingCompositeContext context, void* buffer, int bufferSize)
Parameters
Type | Name | Description |
---|---|---|
Input |
context | Callback context for the binding composite. Use this to access the values supplied by part bindings. |
void* | buffer | Buffer that receives the value read for the composite. |
int | bufferSize | Size of the buffer allocated at |
Overrides
Remarks
This API will be used if someone calls Read
By deriving from Input
Exceptions
Type | Condition |
---|---|
Argument |
|
Argument |
|
See Also
ReadValueAsObject(ref InputBindingCompositeContext)
Read the value of the composite as a boxed object. This allows reading the value without having to know the value type and without having to deal with raw byte buffers.
Declaration
public override object ReadValueAsObject(ref InputBindingCompositeContext context)
Parameters
Type | Name | Description |
---|---|---|
Input |
context | Callback context for the binding composite. Use this to access the values supplied by part bindings. |
Returns
Type | Description |
---|---|
object | The current value of the composite according to the state passed in through
|
Overrides
Remarks
This API will be used if someone calls Read
By deriving from Input