VR Jester 应用程序接口

VR Jester 应用程序接口

VR手势识别API

适用于 Minecraft VR 的虚拟现实手势识别 API

喜欢玩 Vivecraft 或 QuestCraft 吗?喜欢模组吗?是否曾希望模组能更好地兼容 VR?无需再等待。这就是为开发者与玩家共同准备的解决方案!

此 API 使 Minecraft 模组开发者能够轻松为其模组添加 VR 兼容性支持。创建任何自定义手势并映射到任何按键绑定以触发事件。您不再需要将控制器按键映射到键盘按键。使用此 API,您的身体即控制器。

演示:

安装:

  1. 安装必要的依赖模组。请注意,Questbind 仅在使用 QuestCraft 时必需。
  2. 下载 VR Jester API 模组并将其放入 mods 文件夹中。
  3. 运行 Minecraft。必要的配置文件将在初始化时生成。###

使用方法:

  1. 在 Minecraft VR 中,将您的控制器按钮之一绑定到“手势监听触发器 (Gesture Listener Trigger)”。我推荐使用抓握按钮。对于 Vivecraft,您必须通过 Steam VR 的控制器绑定菜单进行操作。对于 QuestCraft,您可以通过 QuestBind 进行操作。
  2. 创建手势有两种方法:
    • 使用 /gesture 命令
    • 直接修改 config/gesture_store.json(手势存储位置)。示例手势存储:
   "GESTURE 1": {
      "RIGHT_CONTROLLER|LEFT_CONTROLLER": [
        {
          "vrDevice": "RIGHT_CONTROLLER|LEFT_CONTROLLER",
          "movement": "forward",
          "elapsedTime": 0,
          "speed": 0.0,
          "direction": {
            "x": 0.0,
            "y": 0.0,
            "z": 0.0
          },
          "devicesInProximity": {}
        }
      ]
    },
    ...
  1. 创建手势后,您可以在 config/VRJesterAPI.cfg 中的“GESTURE_KEY_MAPPINGS”字段下创建键值对象,将其映射到按键绑定。您可以在 .minecraft/options.txt 中找到按键绑定名称。“KEY_ACTION”字段决定识别到的手势是触发一次 点击 键按下,还是 按住 键按下。当您在手势被识别后保持该手势不动的时长达到设定值时,将触发 按住。
"GESTURE_KEY_MAPPINGS": {
   "GESTURE 1": {
      "KEY_MAPPING": "examplemod.key.ability_1",
      "KEY_ACTION": "click"
   },
   "GESTURE 2": {
      "KEY_MAPPING": "key.hotbar.2,key.sneak",
      "KEY_ACTION": "hold"
   },
   "GESTURE 3": {
      "KEY_MAPPING": "key.keyboard.j",
      "KEY_ACTION": "click"
   }
}

下载: modrinth curseforge

信息:

  • 将方括号 [ ] 中的每个对象视为手势的一个片段。您可以添加多个这样的 GestureComponent 对象。此 API 可识别您想要得任意复杂手势!但要知道,手势越复杂,正确执行以匹配您存储的手势的难度就越大。
  • “movement”的不同取值包括 forward, back, left, right, up, down。移动方向相对于您点击启动手势监听器的 Jester 触发器时的面向方向。简单的例子是,朝您面向的同一方向出拳会被识别为“forward (向前)”。
  • “vrDevice”的不同取值包括 RIGHT_CONTROLLER, LEFT_CONTROLLER, HEAD_MOUNTED_DISPLAY。如果您希望手势在多个 VR 设备上被识别,可以使用竖线 | 进行“逻辑或”组合,如下所示:RIGHT_CONTROLLER|LEFT_CONTROLLER|HEAD_MOUNTED_DISPLAY。
  • “elapsedTime”以毫秒为单位。因此,设置值为 2000 表示该部分手势持续 2 秒。这适用于类似充能蓄力的动作。
  • “speed”字段是一个浮点值,代表该手势组件的速度。识别出拳速度的一个合理阈值大约是 1500.0-2000.0,您可以随意调整这些数值。
  • “direction”字段接受 x,y,z 浮点值,用于创建 3D 归一化向量。此字段的用法示例是使用 {0.0, 1.0, 0.0} 来识别玩家拳头朝向向上的情况。由于存在一定的容差阈值,因此不必完全精确匹配。
  • 最后是“devicesInProximity”字段,您可以在下面看到其格式示例。此示例的含义是,此手势组件的 vrDevice 设备必须在左控制器的近距离范围内保持 20 个游戏刻(tick)。
  "devicesInProximity": {
      "LEFT_CONTROLLER": 20
  }
  • 订阅事件总线以处理由识别到的手势触发的事件(Forge),或注册到事件回调接口(Fabric)。

Forge:

@SubscribeEvent
public void onGestureEvent(GestureEvent event) {
    // 手势处理代码 -- event.getGestureName()
}

Fabric:

public static void init() {
    GestureEventCallback.EVENT.register((gestureEvent) → {
        // 手势处理代码 -- gestureEvent.getGestureName()
    });
}

规划中:

未来我将添加连续手势识别、更多配置选项和优化。

更新于 2025/3/27 - 我知道我已经有一段时间没有更新了,但我完全打算回来继续开发这个模组。我一直在忙于其他项目。对造成的不便深表歉意。