使用VRPN输入

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

Choose your operating system:

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 0 Events > 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

欢迎帮助改进虚幻引擎文档!请告诉我们该如何更好地为您服务。
填写问卷调查
取消