Choose your operating system:
Windows
macOS
Linux
可将输入事件从运动跟踪器、轴控制器、按钮控制器和键盘发送到nDisplay,同时已配置以上设备以将其数据发送到 VRPN 网络。
设置nDisplay的VRPN
要使用带nDisplay的VRPN输入设备,请执行以下操作:
-
在网络上安装VRPN服务器。
此版nDisplay需要 版本7.33 的VRPN。 -
在服务器的 vrpn.cfg 文件中(位于服务器可执行文件旁),启用输入设备并指定命名。
-
在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)) 函数来实现:
反映设置接受以下值:
[input] 设置 |
蓝图选项 |
说明 |
---|---|---|
nDisplay |
仅nDisplay按钮 |
将键盘事件路由到nDisplay新建的键盘输入事件。可使用 输入(Input)> N显示键盘事件(N Display Keyboard Events) 类别中的节点在蓝图脚本中响应此类事件。 |
ue4 |
原生UE4键盘事件 |
键盘事件通过内置输入系统路由到虚幻引擎。可在应用程序中所用 InputController 类中响应此类事件,也可在蓝图脚本中所用 输入 > 键盘事件 类别的节点进行响应。 |
both |
同时nDisplay与UE4原生 |
同时通过nDisplay键盘处理系统和虚幻引擎内置输入系统路由键盘事件。可使用以上描述中的任一方法响应其事件。 |
none |
No reflection |
不通过nDisplay键盘处理系统或内置输入系统路由键盘事件。
|
设置键盘设备的反射时,设置将应用到设备上的所有键。但仍可将单独键重新绑定到UE4中的其他输入事件。详情参阅 将设备通道绑定到UE4输入 。
将设备通道绑定到UE4输入
通过将VRPN设备的特定信道绑定到虚幻引擎事件和运动源,可使项目响应VRPN输入设备。可使用以下两种等效方法创建此类绑定:
-
通过在nDisplay配置文件中设置要绑定到运动源或事件的各通道 input_setup 部分。
-
通过使用nDisplay输入模块API中可用函数:
示例:将追踪设备绑定到运动源
可将VRPN运动追踪设备绑定到虚幻引擎中的现有运动源。然后可使用该运动源来驱动指定到关卡中Actor的MotionControllerComponent。
要进行此设置:
-
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
-
还需将要追踪的设备和通道绑定到要接收其输入的运动源。
通过向配置文件添加 input_source 可进行操作:
[input_setup] id=TestTrack ch=0 bind="Special_1"
也可通过调用 绑定VRPN追踪器(接口调用(Bind VRPN Tracker (Interface Call)) 函数并设置相同值,以在项目的蓝图代码中进行操作:
示例:绑定模拟设备
模拟VRPN设备提供范围为0到1的输入值,类似于虚幻引擎中的鼠标或摇杆输入。
nDisplay包含一组20个通用模拟输入,可将模拟VRPN设备绑定到此类模拟输入。在 输入(Input)> N Display事件(N Display Events) 和 输入(Input) > N Display值(N Display Values) 类别下可找到以上输入。
无需使用此类nDisplay模拟输入;也可将VRPN设备绑定到其他UE4输入。以下示例展示了这两种方式。
要进行此设置:
-
nDisplay配置文件需含有定义模拟设备的 输入 部分。例如:
[input] id=TestAxes type=analog addr=Mouse0@127.0.0.1
-
还需将要追踪的设备和通道绑定到要接收其输入的模拟输入。模拟设备通常有两个通道,一个用于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)) 函数并设置相同值,以在项目的蓝图代码中进行操作:
-
需检测发生的输入事件或获取沿自身轴获取输入实际值时,使用已绑定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按钮输入;也可将VRPN设备绑定到其他UE4输入。以下示例展示了这两种方式。
要进行此设置:
-
nDisplay配置文件需含有定义按钮设备的 输入 部分。例如:
[input] id=TestBtn type=buttons addr=Mouse0@127.0.0.1
-
还需将要追踪的设备和通道绑定到要接收其输入的按钮输入。
通过向配置文件添加 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)) 函数并设置相同值,以在项目的蓝图代码中进行操作:
-
需检测发生的输入事件时,使用已绑定VRPN按钮通道的输入事件。
例如,在此情况下,使用 Events > N Display Events > nDisplay Button 0 和 Events > Gamepad Events > Gamepad Face Button Top 节点。
示例:绑定键盘设备
如上文 反射键盘事件 所述,可使VRPN键盘将自身输入映射到虚幻引擎内置键盘输入,或者新nDisplay键盘输入,亦或同时映射到此两者,或均不映射。无论设置的反射,也可将键盘的单个键绑定到其他虚幻引擎或nDisplay输入事件。
要进行此设置:
-
nDisplay配置文件需含有定义键盘设备的 输入 部分。例如:
[input] id=TestKb type=keyboard addr=Keyboard0@127.0.0.1
-
还需将要追踪的设备和键绑定到该键将触发的虚幻引擎输入事件。
通过向配置文件添加 input_source 部分可进行操作:
[input_source] id=TestBtn key="Space Bar" bind="Gamepad Left Trigger"
也可通过调用 绑定VRPN键盘(接口调用(Bind VRPN Keyboard (Interface Call)) 函数并设置相同值,以在项目的蓝图代码中进行操作:
-
需检测发生的输入事件时,使用已绑定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)) 函数:
为此,需将VRPN指定的 设备通道 输入数字ID设为要测试的按钮。
要确定要测试的键盘按钮所对应 设备通道 的数字ID,可运行VRPN提供的"vrpn_print_devices.exe"应用程序。该工具运行时,其将向控制台输出已按下键盘按钮的数字ID。
例如,空格键对应键号57: