JJM Seat SDK 虚幻引擎开发指南
面向 Unreal Engine 5.x 的高性能 4D 动感座椅控制套件。开箱即用,支持跨平台姿态同步与风水气热多感官特效一体化联动。
💺 双座椅型号特性与配置
SDK 专为两种核心物理硬件进行了动力学建模与参数固化。开发者只需在连接节点选择对应型号,底层自动完成所有行程动力学与归零适配。
小白座椅 (XiaoBai)
针对便携式、紧凑型体验台研发。冲程比大,响应极快,非常适合家庭体验、轻量商业展台及短平快互动娱乐。
通感座椅 (TongGan)
高保真专业级沉浸式动感座椅。动力输出强劲平顺,出厂即校准在水平中立位,专为飞行模拟、赛车漂移与高端影院定制。
🚀 极简快速上手
三步将动感控制集成到您的场景中,无需编写任何 C++ 代码与底层网络通信逻辑。
放入项目 Plugins 目录
将预编译完成的 SeatControlSDK 文件夹直接复制到项目的 Plugins/ 目录下,启动引擎即可自动加载。
蓝图右键添加 Get SeatDeviceManager
在任意蓝图(关卡蓝图、Pawn、UMG UI)中右键搜索 Seat Device Manager,获取全局子系统单例。
连接并下发姿态
在 BeginPlay 调用 RegisterSeatWithParameters,随后在 50Hz 定时器中调用 SendRotation 驱动运动。
🎮 蓝图核心操作节点:设备连接管理 (Registration)
负责初始化本地 UDP 姿态通信与 Modbus TCP 特效回路,管理设备生命周期。
Register Xiao Bai Seat
小白型号座椅的一键快捷直连接口。由于小白座椅硬件仅具备姿态动感机构,不带风水香热外设,该节点会自动配置姿态 UDP 通信,并强制安全禁用所有特效逻辑。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
Target | Seat Device Manager | Self | 全局设备管理器单例 |
Udp Ip | String | "192.168.15.211" | 小白座椅控制器的 IPv4 地址 |
Udp Port | int32 | 7408 | 座椅控制器姿态监听端口 |
返回:true 表示本地 UDP 套接字初始化成功;false 表示参数非法或创建失败。
Register Seat with Parameters
完整参数化连接接口,推荐在节点引脚上右键选择 “拆分结构体引脚 (Split Struct Pin)” 展开配置。支持小白与通感全型号,支持自定义网络端点。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
Connect Params Seat Type | ESeatModelType | 小白 | 座椅型号:小白 (XiaoBai) 或 通感 (TongGan) |
Connect Params Udp Ip | String | "192.168.15.211" | 姿态控制器 IPv4 地址 |
Connect Params Udp Port | int32 | 7408 | 姿态控制器监听端口(1~65535) |
Connect Params Enable Effects | bool | true | 是否启用特效回路(仅通感有效;小白自动禁用) |
Connect Params Relay Ip | String | "192.168.15.7" | 继电器控制器 IPv4(水雾/香薰/加热) |
Connect Params Relay Port | int32 | 8234 | 继电器 Modbus TCP 端口 |
Connect Params Speed Ip | String | "192.168.15.8" | 风速控制器 IPv4(风机控制) |
Connect Params Speed Port | int32 | 8234 | 风速控制器 Modbus 端口 |
内部固定:继电器从站地址 1、风速从站地址 1、风速寄存器 3 由 SDK 内部固定优化,不开放也不占用节点引脚。
Unregister Seat
断开并注销当前座椅。内部自动执行关闭全部特效、下发一次硬件复位归位,并释放底层的通信资源与后台工作线程。
Is Seat Ready
检查当前 SDK 是否已成功完成初始化与配置绑定。返回 true 表示设备管理器已就绪,可正常下发控制。
Get Active Config
获取当前正在生效的配置资产对象(USeatDeviceConfig),用于 UI 界面反显当前的 IP、端口与连接模式。
🕹️ 蓝图核心操作节点:姿态运动控制 (Action)
驱动三轴动感机构与水平偏航转台,支持四轴标量与 UE 原生 FRotator 便捷输入。
Send Posture
核心动感控制接口。输入物理控制量,SDK 内部进行三轴混控算法解算后,以 UDP 报文向控制器发送电机控制脉冲。建议以 50Hz (20ms) 频率循环下发。
| 参数 | 类型 | 建议范围 | 说明 |
|---|---|---|---|
Pitch | float | -15.0 ~ +15.0 | 俯仰角(度):正值前倾(俯冲/下坡),负值后仰(仰头/爬坡) |
Roll | float | -15.0 ~ +15.0 | 横滚角(度):正值向右侧倾,负值向左侧倾 |
Yaw | float | -180.0 ~ +180.0 | 偏航角(度):底盘水平转向,0 度为中立朝向。脉冲倍率内部已自处理 |
Height | float | 0.0 ~ 1.0 | 基础高度:三轴混控前的支撑高度,中间平衡位置为 0.5 |
Send Rotation
便捷旋转下发节点,专为直接对接虚幻引擎载具、飞船或摄像机旋转设计。内部自动将 FRotator 规范化至 [-180, 180] 并乘以符号系数后调用 Send Posture。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
Rotation | FRotator | (0, 0, 0) | 虚幻引擎原生旋转体(Pitch, Yaw, Roll) |
Height | float | 0.5 | 基础高度(归一化 0.0 ~ 1.0) |
Pitch Sign | float | 1.0 | 俯仰符号校准系数(前后方向相反时填 -1.0) |
Roll Sign | float | 1.0 | 横滚符号校准系数(左右侧倾相反时填 -1.0) |
Yaw Sign | float | 1.0 | 偏航旋转校准系数(旋转转向相反时填 -1.0) |
Reset Position
向动感底盘提交型号特定的 Home 归位指令。通感型号归位到归一化高度 0.5 且旋转归零;小白型号归位到归一化高度 0.0 且旋转归零。
💨 蓝图核心操作节点:4D 环境特效 (Effects)
控制风速、水雾、香薰和加热外设。仅通感座椅有效,小白型号调用时自动被底层安全屏蔽。
Set Wind Speed
通过 Modbus RTU over TCP 协议向变频风控器下发指定档位指令。
| 枚举选项 | 底层转速写入 | 效果体验 |
|---|---|---|
关 (Off) | 0% (停止) | 风机完全停止 |
1档 - 低 (Low) | 50% 转速 | 微风拂面、徐徐微风 |
2档 - 中 (Medium) | 70% 转速 | 行驶中速风感 |
3档 - 高 (High) | 100% (全速) | 极速狂飙、高空下坠大风 |
Set Water Mist
通过标准 Modbus TCP 控制高压微雾泵与电磁阀门。
| 枚举选项 | 物理效果说明 |
|---|---|
关 (Off) | 关闭水泵与阀门 |
雾 (Mist) | 微雾颗粒,模拟清晨雾气、经过瀑布效果 |
小水 (SmallWater) | 小雨滴喷溅效果 |
大水 (BigWater) | 浪花扑面、暴雨喷射效果 |
Set Scent
通过继电器开启指定香型的气泵回路。选项包括:关 (Off)、香薰通道 1 (Scent1)(如青草清香)、香薰通道 2 (Scent2)(如海洋花香)。
Set Heater
控制加热继电器的通断状态。true 开启加热,false 关闭加热。建议业务层限制单次连续开启不超过 120 秒。
Turn Off All Effects
安全一键关闭指令。异步提交风速=0、水雾=关、香薰=关、加热=关,并将内部状态快照复位。常用于剧情中断、换关或受控停机。
🔄 运行时端点热切换 (Hot-Switching)
支持在游戏运行中无感更换姿态目标或修正特效控制器地址,无需重启引擎或重新配置全套网络。
Set Udp Endpoint
轻量切换当前座椅的姿态 UDP 目标。只更新目标 IP 和端口,不会重建风/水/香/热特效连接,本地绑定端口(8410)保持不变。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
Udp Ip | String | "192.168.15.251" | 新的座椅控制器 IPv4 地址 |
Udp Port | int32 | 7408 | 新的控制器监听端口(1~65535) |
返回:成功返回 true;IP/端口非法或 SDK 未初始化返回 false 并保留原目标。切换时会自动清空旧目标尚未发出的积压姿态报文。
Set Effects Endpoints
原子切换继电器与风速控制器的 IP 和端口。两路新连接都成功后才替换旧连接;任一路失败则完整保留旧连接,绝不出现半切换。姿态 UDP 目标不受任何影响。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
Relay Ip | String | "192.168.15.7" | 继电器 IPv4 地址(水雾/香薰/加热) |
Relay Port | int32 | 8234 | 继电器 Modbus TCP 端口 |
Speed Ip | String | "192.168.15.8" | 风速控制器 IPv4 地址 |
Speed Port | int32 | 8234 | 风速控制器 Modbus 端口 |
安全行为:切换前会自动尽力关闭旧设备的特效;新设备连接成功后默认保持全关,不会自动恢复切换前的档位。该接口属于配置重连操作,切忌在 Tick 中每帧调用。
📊 状态反显与驱动信息 (State & Info)
用于 UI 界面仪表盘反显当前姿态与档位,查询底层驱动版本。
Get Current State
获取当前最近下发给硬件的姿态角、高度与特效档位状态快照,用于 UI 界面仪表盘反显。
| 字段名 | 数据类型 | 说明 |
|---|---|---|
Current Pitch | float | 最近下发的俯仰角(度) |
Current Roll | float | 最近下发的横滚角(度) |
Current Yaw | float | 最近下发的偏航角(度) |
Current Height | float | 最近下发的基础高度(0.0 ~ 1.0) |
Wind Level | int32 | 当前风速档位(0=关,1=低,2=中,3=高) |
Water Mist Type | int32 | 当前水雾模式(0=关,1=雾,2=小水,3=大水) |
Scent Type | int32 | 当前香薰通道(0=关,1=通道1,2=通道2) |
bHeater On | bool | 当前加热继电器状态 |
Get SDKVersion
获取底层动态链接库或 AAR 的版本字符串(例如 "SeatControlSDK-PC v0.6.0")。
⚙️ 通信规范与硬件运行参数
动感座椅与环境外设的网络底层通讯物理协议规范。
| 通信通道 | 协议类型 | 默认端口 | 约束与规范说明 |
|---|---|---|---|
| 姿态控制网络 | UDP 客户端单向发送 | 7408 |
本地源端口固定绑定为 8410。硬件仅接收源端口为 8410 的控制包;同一台 PC 同一时间只允许运行一个使用该 SDK 的进程 |
| 继电器控制器 | Modbus TCP (标准 MBAP) | 8234 |
控制水雾、香薰、加热。从站地址 SDK 内部固定为 1 |
| 风速控制器 | Modbus RTU over TCP | 8234 |
裸 RTU 帧带 CRC16 校验经 TCP 透传。从站地址固定为 1,寄存器地址固定为 3 |
| 机械姿态限幅 | 俯仰: ±15° / 横滚: ±15° |
- | 超出范围会被内部混控算法自动平滑限幅截断 |
| 旋转偏航倍率 | 偏航: ±180° |
- | SDK 内部已集成旋转减速比脉冲换算,上层调用无需手动乘 2 |
| 下发频率建议 | 推荐 50Hz (20ms) 定时器 | - | 姿态建议使用定时器稳定输出;特效仅在档位变化时单次触发,切忌在 Tick 中每帧重复提交 |
❓ 常见问题排查 (FAQ)
常见硬件调试疑问与快速定位指南。
Send Posture 或 Send Rotation。归位指令刚发出,下一毫秒的姿态数据瞬间覆盖了归位目标。解决方法:点击归位前,务必先清除或暂停姿态发送定时器。
- 检查连接时
Seat Type是否误选为了小白。小白型号在底层强制禁用了所有特效逻辑,必须选择通感; - 检查连接参数中
Enable Effects是否勾选; - 检查继电器 IP 与风速控制器 IP 是否与现场实际设备匹配(通常为
192.168.15.7:8234与192.168.15.8:8234)。若填错,可直接在运行时调用Set Effects Endpoints纠错。
true仅代表本地套接字创建成功(UDP 为无连接协议,无握手确认);- 确认本机与座椅控制器处于同一局域网网段(如
192.168.15.xxx),并在命令行中ping控制器 IP 测试网络连通性; - 检查本机防火墙是否阻断了出站 UDP 报文;
- 检查是否有其他调试软件(如串口调试工具、Unity 测试程序)占用了本地的 8410 源端口。
Send Rotation 节点上,将对应轴向的校准系数(如 Roll Sign)由 1.0 修改为 -1.0 即可一键反向纠正。