docs.unity3d.com
    Show / Hide Table of Contents

    Class TwoModifiersComposite

    A binding with two additional modifiers modifier. The bound controls only trigger when both modifiers are pressed.

    Inheritance
    Object
    InputBindingComposite
    TwoModifiersComposite
    Inherited Members
    InputBindingComposite.GetExpectedControlLayoutName(String, String)
    Namespace: UnityEngine.InputSystem.Composites
    Syntax
    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 altKey and shiftKey on the keyboard have to be pressed in order for the player to be able to look around.

    lookAction.AddCompositeBinding("OneModifier")
        .With("Modifier1", "<Keyboard>/alt")
        .With("Modifier2", "<Keyboard>/shift")
        .With("Binding", "<Mouse>/delta")
    // Create a button action that requires LMB on the mouse
    // to be held for the mouse delta to come through.
    var action = new InputAction(type: InputActionType.Button);
    action.AddCompositeBinding("OneModifier")
        .With("Modifier", "<Mouse>/leftButton")
        .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
    Int32

    Part index to use with ReadValue<TValue>(Int32).

    Remarks

    This property is automatically assigned by the input system.

    modifier1

    Binding for the first button that acts as a modifier, e.g. <Keyboard/leftCtrl.

    Declaration
    public int modifier1
    Field Value
    Type Description
    Int32

    Part index to use with ReadValue<TValue>(Int32).

    Remarks

    This property is automatically assigned by the input system.

    modifier2

    Binding for the second button that acts as a modifier, e.g. <Keyboard/leftCtrl.

    Declaration
    public int modifier2
    Field Value
    Type Description
    Int32

    Part index to use with ReadValue<TValue>(Int32).

    Remarks

    This property is automatically assigned by the input system.

    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
    Int32
    Overrides
    InputBindingComposite.valueSizeInBytes

    valueType

    Type of values read from controls bound to binding.

    Declaration
    public override Type valueType { get; }
    Property Value
    Type Description
    Type
    Overrides
    InputBindingComposite.valueType

    Methods

    EvaluateMagnitude(ref InputBindingCompositeContext)

    Declaration
    public override float EvaluateMagnitude(ref InputBindingCompositeContext context)
    Parameters
    Type Name Description
    InputBindingCompositeContext context
    Returns
    Type Description
    Single
    Overrides
    InputBindingComposite.EvaluateMagnitude(ref InputBindingCompositeContext)

    FinishSetup(ref InputBindingCompositeContext)

    Called after binding resolution for an InputActionMap is complete.

    Declaration
    protected override void FinishSetup(ref InputBindingCompositeContext context)
    Parameters
    Type Name Description
    InputBindingCompositeContext context
    Overrides
    InputBindingComposite.FinishSetup(ref InputBindingCompositeContext)
    Remarks

    Some composites do not have predetermine value types. Two examples of this are OneModifierComposite and TwoModifiersComposite, which both have a "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);
    }

    ReadValue(ref InputBindingCompositeContext, Void*, Int32)

    Read a value from the composite without having to know the value type (unlike ReadValue(ref InputBindingCompositeContext) and without allocating GC heap memory (unlike ReadValueAsObject(ref InputBindingCompositeContext)).

    Declaration
    public override void ReadValue(ref InputBindingCompositeContext context, void *buffer, int bufferSize)
    Parameters
    Type Name Description
    InputBindingCompositeContext 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.

    Int32 bufferSize

    Size of the buffer allocated at buffer.

    Overrides
    InputBindingComposite.ReadValue(ref InputBindingCompositeContext, Void*, Int32)
    Remarks

    This API will be used if someone calls ReadValue(Void*, Int32) with the action leading to the composite.

    By deriving from InputBindingComposite<TValue>, this will automatically be implemented for you.

    See Also
    ReadValue(Void*, Int32)

    ReadValueAsObject(ref InputBindingCompositeContext)

    Declaration
    public override object ReadValueAsObject(ref InputBindingCompositeContext context)
    Parameters
    Type Name Description
    InputBindingCompositeContext context
    Returns
    Type Description
    Object
    Overrides
    InputBindingComposite.ReadValueAsObject(ref InputBindingCompositeContext)

    See Also

    OneModifierComposite
    Back to top
    Copyright © 2023 Unity Technologies — Terms of use
    • Legal
    • Privacy Policy
    • Cookies
    • Do Not Sell or Share My Personal Information
    • Your Privacy Choices (Cookie Settings)
    "Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
    Generated by DocFX on 18 October 2023