使用VRPN输入

介绍设置nDisplay获取VRPN设备中输入的方法。

Windows
MacOS
Linux

可将输入事件从运动跟踪器、轴控制器、按钮控制器和键盘发送到nDisplay,同时已配置以上设备以将其数据发送到VRPN 网络。

设置nDisplay的VRPN

要使用带nDisplay的VRPN输入设备,请执行以下操作:

  1. 在网络上安装VRPN服务器。
    此版nDisplay需要 版本7.33 的VRPN。

  2. 在服务器的 vrpn.cfg 文件中(位于服务器可执行文件旁),启用输入设备并指定命名。

  3. 在nDisplay配置文件中,添加 输入 条目来设置VRPN输入设备。

根据要设置的输入设备种类,及将该设备中的输入应用到虚幻引擎项目的方式,可能需要对输入配置进行不同设置,并执行额外步骤。参见以下章节,了解应用到不同类型输入设备的相关详情。

欲了解在nDisplay配置文件中可设置的所有设置和参数的完整详情,参阅nDisplay配置文件参考

将VRPN跟踪器映射到nDisplay相机或场景节点

如拥有VRPN跟踪设备,可将其当前位置直接映射到nDisplay配置文件中设置的nDisplay相机或场景节点。在真实空间中移动跟踪器时,相机或场景节点的位置将在虚拟空间中自动更新以跟进。

可在nDisplay配置文件中通过设置 输入 相机 部分以进行以上操作。

以下示例展示了其中一种设置ART DTrack跟踪系统的方法:

  • 在VRPN服务器可执行文件旁的 Vrpn.cfg 中,添加以下行:

    vrpn_Tracker_DTrack DTrack  5000

    此操作可使VRPN接收来自于端口5000的DTrack输入,并将其映射到名为DTrack的VRPN设备。(确保配置DTrack以将其跟踪数据输出到端口5000。)

  • 在nDisplay配置文件中,添加以下行:

    [input] id=CaveTracking type=tracker addr=DTrack@127.0.0.1 loc="X=1.32,Y=0,Z=0.93735" rot="P=0,Y=0,R=0" front=Z right=-X up=Y
    [camera] id=camera_dynamic loc="X=0,Y=0,Z=0" tracker_id=CaveTracking tracker_ch=0

    首行创建名为 CaveTracking 的nDisplay输入设备,其会从VRPN地址 DTrack@127.0.01 获取数据。必在此调整坐标系以适应跟踪系统和偏移。第二行为相机配置,其告知nDisplay从通道 0 上的 CaveTracking 输入获取相机位置。

反射键盘事件

如已设置VRPN服务器的键盘设备,则可控制虚幻引擎项目中发射该键盘的事件(按下和松开键时)的方式。可使键盘按键触发标准UE4键盘输入系统,或直接按键触发nDisplay提供的新键盘输入。可同时使用,也可均不使用。

可用两种等同方法进行此设置:

  • 可在nDisplay配置文件中,通过设置 输入 部分的 反映 选项进行实现,该输入定义键盘设备:

    [input] id=ControlKeyboard type=keyboard addr=Keyboard0@192.168.0.1 reflect=ue4
  • 也可在项目蓝图代码中,通过调用 设置VRPN键盘反射(函数调用)(Set VRPN Keyboard Reflection (Interface Call)) 函数来实现:
    Keyboard reflection in Blueprint

反映设置接受以下值:

[input] 设置

蓝图选项

说明

nDisplay

仅nDisplay按钮

将键盘事件路由到nDisplay新建的键盘输入事件。可使用 输入(Input)> N显示键盘事件(N Display Keyboard Events) 类别中的节点在蓝图脚本中响应此类事件。

ue4

原生UE4键盘事件

键盘事件通过内置输入系统路由到虚幻引擎。可在应用程序中所用 InputController 类中响应此类事件,也可在蓝图脚本中所用 输入 > 键盘事件 类别的节点进行响应。

both

同时nDisplay与UE4原生

同时通过nDisplay键盘处理系统和虚幻引擎内置输入系统路由键盘事件。可使用以上描述中的任一方法响应其事件。

none

No reflection

不通过nDisplay键盘处理系统或内置输入系统路由键盘事件。
如使用此选项,则需要:

  • 使用nDisplay蓝图API中的蓝图节点查询特定事件,如 (显示群集)Display Cluster > (输入)Input > 是否按下VRPN按钮(Was VRPN Button Pressed)显示群集(Display Cluster) > (输入)Input > 是否松开VRPN按钮(Was VRPN Button Released)。另可参阅查询设备输入

  • 将单独键绑定到UE4中的其他输入事件。详情参阅将设备通道绑定到UE4输入

设置键盘设备的反射时,设置将应用到设备上的所有键。但仍可将单独键重新绑定到UE4中的其他输入事件。详情参阅将设备通道绑定到UE4输入

将设备通道绑定到UE4输入

通过将VRPN设备的特定信道绑定到虚幻引擎事件和运动源,可使项目响应VRPN输入设备。可使用以下两种等效方法创建此类绑定:

  • 通过在nDisplay配置文件中设置要绑定到运动源或事件的各通道 input_setup 部分。

  • 通过使用nDisplay输入模块API中可用函数:
    Bind VRPN device channel

示例:将追踪设备绑定到运动源

可将VRPN运动追踪设备绑定到虚幻引擎中的现有运动源。然后可使用该运动源来驱动指定到关卡中Actor的MotionControllerComponent。

要进行此设置:

  1. nDisplay配置文件需含有定义追踪器的 输入 部分。例如:

    [input] id=TestTrack type=tracker addr=Tracker0@127.0.0.1 loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" front=X right=Y up=Z
  2. 还需将要追踪的设备和通道绑定到要接收其输入的运动源。
    通过向配置文件添加 input_source 可进行操作:

    [input_setup] id=TestTrack ch=0 bind="Special_1"

    也可通过调用 绑定VRPN追踪器(接口调用(Bind VRPN Tracker (Interface Call)) 函数并设置相同值,以在项目的蓝图代码中进行操作:
    Bind VRPN Tracker

示例:绑定模拟设备

模拟VRPN设备提供范围为0到1的输入值,类似于虚幻引擎中的鼠标或摇杆输入。

nDisplay包含一组20个通用模拟输入,可将模拟VRPN设备绑定到此类模拟输入。在 输入(Input)> N Display事件(N Display Events)输入(Input) > N Display值(N Display Values) 类别下可找到以上输入。

nDisplay generic analog events and values

无需使用此类nDisplay模拟输入;也可将VRPN设备绑定到其他UE4输入。以下示例展示了这两种方式。

要进行此设置:

  1. nDisplay配置文件需含有定义模拟设备的 输入 部分。例如:

    [input] id=TestAxes type=analog addr=Mouse0@127.0.0.1
  2. 还需将要追踪的设备和通道绑定到要接收其输入的模拟输入。模拟设备通常有两个通道,一个用于X轴上的输入,另一个用于Y轴上的输入。在本例中,您通常希望将两个轴分别绑定到不同的nDisplay模拟输入。
    您可以通过在配置文件中添加两个 input_source 部分来实现:

    [input_setup] id=TestAxes ch=0 bind="nDisplay Analog 0"
    [input_setup] id=TestAxes ch=1 bind="Gamepad Left Thumbstick Y-Axis".

    也可通过调用 绑定VRPN通道(接口调用(Bind VRPN Channel (Interface Call)) 函数并设置相同值,以在项目的蓝图代码中进行操作:
    Bind VRPN Channel for analog device

  3. 需检测发生的输入事件或获取沿自身轴获取输入实际值时,使用已绑定VRPN轴通道的输入事件。
    例如,在此情况下使用:

    • 对于首轴,使用 输入(Input) > N显示事件(N Display Events) > nDisplay模拟0(nDisplay Analog 0) 响应输入事件,使用 输入(Input) > N显示值(N Display Values) > nDisplay模拟0(nDisplay Analog 0) 来检索当前轴值。

    • 对于第二个轴,使用 输入(Input) > 游戏手柄事件(Gamepad Events) > 游戏手柄左摇杆Y轴(Gamepad Left Thumbstick Y-Axis) 响应输入事件,使用 输入(Input) > 游戏手柄值(Gamepad Values) > 游戏手柄左摇杆Y轴(Gamepad Left Thumbstick Y-Axis) 检索当前轴值。

示例:绑定按钮设备

按下或松开按钮时,按钮VRPN设备会在给定通道上发射事件。

nDisplay包含一组20个通用按钮事件输入,可将按钮设备绑定到此类事件输入。可在 输入(Input)> N Display事件(N Display Events) 类别中找到此类输入。

nDisplay generic button events

无需使用此类nDisplay按钮输入;也可将VRPN设备绑定到其他UE4输入。以下示例展示了这两种方式。

要进行此设置:

  1. nDisplay配置文件需含有定义按钮设备的 输入 部分。例如:

    [input] id=TestBtn type=buttons addr=Mouse0@127.0.0.1
  2. 还需将要追踪的设备和通道绑定到要接收其输入的按钮输入。
    通过向配置文件添加 input_source 部分可进行操作:

    [input_source] id=TestBtn ch=0 bind="nDisplay Button 0"
    [input_source] id=TestBtn ch=2 bind="Gamepad Face Button Top"

    也可通过调用 绑定VRPN通道(接口调用(Bind VRPN Channel (Interface Call)) 函数并设置相同值,以在项目的蓝图代码中进行操作:
    Bind VRPN Channel for button device

  3. 需检测发生的输入事件时,使用已绑定VRPN按钮通道的输入事件。
    例如,在此情况下,使用 Events > N Display Events > nDisplay Button 0Events > Gamepad Events > Gamepad Face Button Top 节点。

示例:绑定键盘设备

如上文反射键盘事件 所述,可使VRPN键盘将自身输入映射到虚幻引擎内置键盘输入,或者新nDisplay键盘输入,亦或同时映射到此两者,或均不映射。无论设置的反射,也可将键盘的单个键绑定到其他虚幻引擎或nDisplay输入事件。

要进行此设置:

  1. nDisplay配置文件需含有定义键盘设备的 输入 部分。例如:

    [input] id=TestKb type=keyboard addr=Keyboard0@127.0.0.1
  2. 还需将要追踪的设备和键绑定到该键将触发的虚幻引擎输入事件。
    通过向配置文件添加 input_source 部分可进行操作:

    [input_source] id=TestBtn key="Space Bar" bind="Gamepad Left Trigger"

    也可通过调用 绑定VRPN键盘(接口调用(Bind VRPN Keyboard (Interface Call)) 函数并设置相同值,以在项目的蓝图代码中进行操作:
    Bind VRPN Keyboard

  3. 需检测发生的输入事件时,使用已绑定VRPN按钮通道的输入事件。
    例如,在此情况下,使用 Event > Gamepad Events > Gamepad Left Trigger 节点。

查询设备输入

可直接查询VRPN设备找出其当前状态,无需依赖输入事件的绑定。

  • 在C++中,使用 IDisplayClusterInputManager 类。

  • 在蓝图中,使用 显示群集(DisplayCluster)> 输入(Input) 下nDisplay API中的函数。此类节点中提供的 设备ID(Device ID)设备信道(Device Channel) 输入值须与nDisplay配置文件的 输入 部分中设置的设备值匹配。
    例如:

键盘按钮和设备通道

本质上VRPN键盘输入是一种特殊类型的按钮设备。如需要查询是否按下给定键盘按钮,使用 是否按下VRPN按钮(接口调用)(Was VRPN Button Pressed (Interface Call)) 函数:

Detecting whether a VRPN button was pressed

为此,需将VRPN指定的 设备通道 输入数字ID设为要测试的按钮。

要确定要测试的键盘按钮所对应 设备通道 的数字ID,可运行VRPN提供的"vrpn_print_devices.exe"应用程序。该工具运行时,其将向控制台输出已按下键盘按钮的数字ID。

例如,空格键对应键号57:

Find the numeric ID of a keyboard button

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback