NWH Aerodynamics
Search Results for

    Show / Hide Table of Contents

    Input

    Note: The Input System is part of NWH Common. For detailed information about input providers, architecture, and creating custom providers, see NWH Common - Input System.

    • AircraftInputManager retrieves input from active InputProvider and fills the InputStates struct with the retrieved data.
    • InputProviders are split into AircraftInputProviders and SceneInputProviders. AircraftInputProviders relay vehicle input (throttle, yoke, etc.) while SceneInputProviders take care of scene input (vehicle changing, camera changing, camera movement and the rest of the inputs not directly related to vehicle. One of each needs to be present (e.g. InputSystemVehicleProvider and InputSystemSceneInputProvider).
    • Multiple different InputProviders can be present in the scene. E.g. InputSystemProviders and MobileInputProviders can be used in the same scene. The resulting input will be a sum of inputs from all InputProviders in case of numeric inputs and logical OR operation of all inputs in case of boolean inputs.
    • Input is stored inside the InputStates object and can be copied over from one vehicle to another. E.g. this is what is done when a trailer is connected to a towing vehicle.
    • To manually set the InputStates make sure Auto Settable is set to false.

    All input providers inherit from either AircraftInputProviderBase or SceneInputProviderBase, but differ in their implementation.

    Input System Warning

    When importing the asset for the first time this message will pop up: 20210409-155746.png

    Select Yes to enable the new Input System. The demo scenes rely on InputSystem.
    If a message This Unity Package has Package Manager dependencies. appears, click Install/Upgrade.

    Available Bindings

    Aircraft Input Provider Bindings

    Warning: Out of the box gamepad bindings are only available for InputSystem.

    Name Type Keyboard Defaults Gamepad Defaults
    Ailerons axis A/D LS - Horizontal
    AileronsTrimLeft button H Button North + Right
    AileronsTrimRight button K Button North + Left
    Rudder axis Q/E L/R Trigger
    RudderTrimLeft button Y
    RudderTrimRight button I
    Elevator axis W/S LS - Vertical
    ElevatorTrimUp button U Button North + Up
    ElevatorTrimDown button J Button North + Down
    FlapsExtend button F7 Right Shoulder
    FlapsExtendFully button F8
    FlapsRetract button F6 Left Shoulder
    FlapsRetractFully button F5
    Spoilers button /
    LandingLights button L
    NavigationLights button K
    LandingGear button G
    EngineStartCommon button T Button West
    EngineStopCommon button F Button North + West
    ThrottleCommon axis F12
    ThrottleIdle button F1
    ThrottleIncrease button F3 Button South
    ThrottleDecrease button F2 Button North
    ThrottleFull button F4
    ParkingBrake button , Button North + East
    Brakes button . Button North
    BrakesLeft button -
    BrakesRight button =
    SmokeSystem button I
    PropPitch axis F9/F10
    PropPitchIncrease button F12
    PropPitchDecrease button F11
    Scene Input Provider Bindings
    Name Type Keyboard Defaults Gamepad Defaults Description
    ChangeCamera button C Start Changes camera.
    CameraRotation 2D axis Mouse Delta Right Stick Controls camera rotation.
    CameraPanning 2D axis Mouse Delta Right Stick Controls camera panning.
    CameraRotationModifier button Mouse - LMB Right Stick Press Enables camera rotation.
    CameraPanningModifier button Mouse - RMB Left Stick Press Enables camera panning.
    CameraZoom axis Mouse - Scroll D-Pad Up/Down Camera zoom in/out.
    ChangeVehicle button V Select Change vehicle or enter/exit vehicle.
    FPSMovement 2D axis WASD Left Stick Demo FPS controller movement.
    ToggleGUI button Tab Toggles demo scene GUI.

    Input Manager (old/classic)

    • Type of InputProvider for handling user input on desktop devices through keyboard and mouse or gamepad.
    • Uses classic/old Unity Input Manager. It is recommended to use the Unity's new Input System instead for new projects.

    Note: InputSystem package is required. The old/classic Unity InputManager is no longer supported.

    Installation

    When first importing NWH Aerodynamics the project will be missing the required bindings in Unity Input Manager. There are two ways to add those:

    1. Manually adding each entry to the Project Settings => Input following the input bindings table.
    2. Copying the contents of InputBindings.txt and appending them to the contents of the [UnityProjectPath]/ProjectSettings/InputManager.asset file. To do so:
      • Close Unity.
      • Open InputManager.asset in a text editor of your choice.
      • Copy the contents of the provided InputBindings.txt file (NWH => Aerodynamics => Scripts => Input => InputProviders => InputManagerProvider => InputBindings.txt) and paste them at the end of the InputManager.asset. Make sure there are no empty lines between the existing content and the pasted content. Also make sure that all the indents are correct. Save the file.
      • Open Unity. Check Project Settings => Input. The input bindings for NWH Aerodynamics will appear towards the bottom of the list.
    Scene Setup

    To set up InputManager-based input in the scene add the following components to the scene:

    1. InputManagerAircraftInputProvider
    2. InputManagerSceneInputProvider

    Any vehicle that is present in the scene will now receive input from these providers.

    Input System (new)

    Installation
    • Install Input System package through Window => Package Manager
    • Under Edit => Project Settings => Player => Other Settings => Active Input Handling, select Input System Package (New).
    Scene Setup
    • Add InputSystemAircraftInputProvider and InputSystemSceneInputProvider to any object in your scene.
    • Default bindings can be modified by double-clicking on .inputactions files. Save Asset must be clicked for the changes to take effect.

    Scripting

    Retrieving Input

    Multiple InputProviders can be present in the scene, meaning that their input has to be combined to get the final input result. To get the combined input use:

    float ailerons = InputProvider.CombinedInput(i => i.Ailerons());
    bool landingGear = InputProvider.CombinedInput(i => i.LandingGear());
    

    Or to get the input from individual InputProviders (say to find out if a button was pressed on a keyboard):

    float ailerons = InputProvider.Instances[0].Ailerons;
    

    Manually Setting Input

    Input in each vehicle is stored in InputStates struct:

    myAircraftInputManager.states
    

    In case input should not be retrieved from user but from another script - as is the case when AI is used - AutoSettable should be set to false. This will disable automatic input fetching from the active InputProviders.

    Input now can be set from any script:

    myAircraftInputManager.Ailerons = myFloatValue;
    

    Custom Input Provider

    If a custom InputProvider is needed it can easily be written. Custom InputProviders allow for new input methods or for modifying the existing ones. E.g. if the MobileInputProvider does not fit the needs of the project a copy of it can be made and modifications are done on that copy. That way it will not get overwritten when the asset is updated.

    Steps to create a new InputProvider:

    • Create a new class, e.g. ExampleInputProvider and make it inherit from AircraftInputProviderBase or SceneInputProviderBase classes.
    • Implement wanted methods. Most IDEs can do this automatically.
    • Edit this page
    In this article
    Back to top Copyright © NWH - Vehicle Physics, Aerodynamics, Dynamic Water Physics