Sistema de entradaInput system

El sistema de entrada es uno de los sistemas más grandes de todas las características que ofrece MRTK.The input system is one of the largest systems out of all features offered by the MRTK. Muchas cosas del kit de herramientas se crean sobre él (punteros, foco, objetos prefab).So many things within the toolkit build on top of it (pointers, focus, prefabs). El código dentro del sistema de entrada es lo que permite interacciones naturales, como agarrar y girar entre plataformas.The code within the input system is what allows for natural interactions like grab and rotate across platforms.

El sistema de entrada tiene parte de su propia terminología que merece la pena definir:The input system has some of its own terminology that are worth defining:

  • Proveedores de datosData providers

    La configuración de entrada del perfil de entrada tiene referencias a entidades conocidas como proveedores de datos; otra palabra que describe estos son los administradores de dispositivos.The input settings in the input profile have references to entities known as data providers - another word that describes these are device managers. Se trata de componentes cuyo trabajo es extender el sistema de entrada de MRTK mediante la interacción con un sistema subyacente específico.These are components whose job is to extend the MRTK input system by interfacing with a specific underlying system. Un ejemplo de proveedor es el proveedor de Windows Mixed Reality, cuyo trabajo es hablar con las API de Windows Mixed Reality subyacentes y, a continuación, traducir los datos de esas API en conceptos de entrada específicos de MRTK a continuación.An example of a provider is the Windows Mixed Reality provider, whose job it is to talk with the underlying Windows Mixed Reality APIs and then translate the data from those APIs into MRTK-specific input concepts below. Otro ejemplo sería el proveedor de OpenVR (cuyo trabajo es hablar con la versión abstracta de Unity de las API de OpenVR y, a continuación, traducir esos datos en conceptos de entrada de MRTK).Another example would be the OpenVR provider (whose job it is to talk to Unity-abstracted version of OpenVR APIs and then translate that data into MRTK input concepts).

  • ControllerController

    Representación de un controlador físico (ya sea un controlador de 6 grados de libertad, una mano de estilo HoloLens 1 con compatibilidad con gestos, una mano totalmente articulada, un controlador de movimiento bisiesco, etc.).A representation of a physical controller (whether it's a 6-degree-of-freedom controller, a HoloLens 1-style hand with gesture support, a fully articulated hand, a leap motion controller, etc.). Los administradores de dispositivos generan controladores (es decir, el administrador de dispositivos WMR genera un controlador y administra su duración cuando ve que existe una mano articulada).Controllers are spawned by device managers (i.e. the WMR device manager will spawn a controller and manage its lifetime when it sees an articulated hand coming into existence).

  • PunteroPointer

    Los controladores usan punteros para interactuar con objetos de juego.Controllers use pointers to interact with game objects. Por ejemplo, el puntero de interacción próxima es responsable de detectar cuándo la mano (que es un controlador) está cerca de los objetos que se anuncian como compatibles con "interacción cercana".For example, the near interaction pointer is responsible for detecting when the hand (which is a controller) is close to objects that advertise themselves as supporting 'near interaction'. Otros ejemplos de punteros son la teleportación o punteros lejanos (es decir, el puntero de rayo de la mano del shell) que usan raycasts lejanos para interactuar con contenido que es más largo que la longitud de los brazos del usuario.Other examples for pointers are teleportation or far pointers (i.e. the shell hand ray pointer) that use far raycasts to engage with content that is longer than arms-length from the user.

    El administrador de dispositivos crea punteros y, a continuación, los asocia a un origen de entrada.Pointers are created by the device manager and then attached to an input source. Para obtener todos los punteros de un controlador, haga lo siguiente: controller.InputSource.PointersTo get all of the pointers for a controller, do: controller.InputSource.Pointers

    Tenga en cuenta que un controlador se puede asociar a muchos punteros diferentes al mismo tiempo.Note that a controller can be associated with many different pointers at the same time. Para asegurarse de que esto no se convierta en caos, hay un mediador de puntero que controla qué punteros pueden estar activos (por ejemplo, el mediador deshabilitará los punteros de interacción lejana cuando se detecte una interacción cercana).In order to ensure that this doesn't devolve into chaos, there is a pointer mediator which controls which pointers are allowed to be active (for example, the mediator will disable far interaction pointers when near interaction is detected).

  • centro de atenciónFocus

    Los eventos de puntero se envían a objetos en el foco.Pointer events are sent to objects in focus. La selección del foco variará según el tipo de puntero; un puntero de rayos de mano usará raycasts, mientras que un puntero a rayas usará los esféricos.Focus selection will vary by pointer type; a hand ray pointer will use raycasts, while a poke pointer will use spherecasts. Un objeto debe implementar IMixedRealityFocusHandler para recibir el foco.An object must implement IMixedRealityFocusHandler to receive focus. Es posible registrar globalmente un objeto para recibir eventos de puntero sin filtrar, pero no se recomienda este enfoque.It's possible to globally register an object to receive unfiltered pointer events, but this approach is not recommended.

    El componente que actualiza los objetos que están en el foco es FocusProvider.The component that updates which objects are in focus is the FocusProvider

  • CursorCursor

    Una entidad asociada a un puntero que proporciona indicaciones visuales adicionales en torno a la interacción del puntero.An entity associated with a pointer that gives additional visual cues around pointer interaction. Por ejemplo, FingerCursor representará un anillo alrededor del dedo y puede girar ese anillo cuando el dedo esté cerca de objetos "casi interactuables".For example, the FingerCursor will render a ring around your finger and may rotate that ring when your finger is close to 'near interactable' objects. Un puntero se puede asociar a un solo cursor en el momento.A pointer can be associated with a single cursor at time.

  • Interacción y manipulaciónInteraction and Manipulation

    Los objetos se pueden etiquetar con un script de interacción o manipulación.Objects can be tagged with an interaction or manipulation script. Puede ser a través de Interactable , o algo como NearInteractionGrabbable / ManipulationHandler .This may be via a Interactable, or something like NearInteractionGrabbable/ManipulationHandler.

    Por ejemplo, NearInteractionGrabbable y NearInteractionTouchable permiten que determinados punteros (especialmente los punteros de interacción cercanos) sepan en qué objetos se puede centrar.For example, NearInteractionGrabbable and NearInteractionTouchable allow for certain pointers (especially near interaction pointers) to know which objects can be focused on.

    Interactable y ManipulationHandler son ejemplos de componentes que escuchan eventos de puntero para modificar objetos visuales de interfaz de usuario o mover, escalar o girar objetos de juego.Interactable and ManipulationHandler are examples of components that listen to pointer events to modify UI visuals or move/scale/rotate game objects.

La imagen siguiente captura la compilación de alto nivel (de abajo hacia arriba) de la pila de entrada de MRTK:The image below captures the high level build up (from bottom up) of the MRTK input stack:

Diagrama del sistema de entrada