游戏手柄触觉反馈

Time:5 分钟

Xbox One 控制器和其他一些 USB 游戏手柄控制器内置有提供触觉反馈的电机。增加隆隆声和振动可以极大地增强游戏的体验,并提供难以通过视觉或听觉传达的微妙反馈。Roblox 向开发者提供了一项名为 HapticService 的服务来处理触觉反馈。

检查振动支持

并非所有的控制器都支持振动,因此在尝试使用 ClassLink|HapticService 之前检查插入的控制器是否具有振动支持很重要。若要检查给定的控制器是否完全支持隆隆声,可以调用 HapticService/IsVibrationSupported

local HapticService = game:GetService("HapticService")
local isVibrationSupported = HapticService:IsVibrationSupported(Enum.UserInputType.Gamepad1)

检查游戏手柄是否支持振动之后,你也应该检查它是否支持你要使用的电机。在 XBox One 上,控制器有 4 个电机:

  • 大:在控制器的左侧。适合一般隆隆声。

  • 小:在控制器的右侧。适用于更细微的隆隆声(轮胎打滑、触电等)。

  • 左触发器:在左触发器下面。适用于刹车、枪械重装等。

  • 右触发器:在右触发器下面。适用于反冲、加速等。

在 PC 上,你无法保证用户拥有什么样的控制器。很多控制器仅支持大小电机(没有触发器)。你可以使用 HapticService/IsMotorSupported 查看用户的控制器是否支持你要使用的电机。

local HapticService = game:GetService("HapticService")
local isVibrationSupported = HapticService:IsVibrationSupported(Enum.UserInputType.Gamepad1)
local largeSupported = false
if isVibrationSupported then
	largeSupported = HapticService:IsMotorSupported(Enum.UserInputType.Gamepad1, Enum.VibrationMotor.Large)
end

打开电机

确认用户的游戏手柄支持振动之后,你便可以开始使用游戏手柄电机了。你可以使用 HapticService/SetMotor 打开游戏手柄上的特定电机。此函数将游戏手柄和振动振幅作为参数。振幅可以是 0 到 1 之间的任意值(0 表示无振动,1 表示最大振动)。

local HapticService = game:GetService("HapticService")
HapticService:SetMotor(Enum.UserInputType.Gamepad1, Enum.VibrationMotor.Large, .5)

你也可以使用 HapticService/GetMotor 来获取给定电机的当前振动振幅。

local HapticService = game:GetService("HapticService")
print(HapticService:GetMotor(Enum.UserInputType.Gamepad1, Enum.VibrationMotor.Large)

Roblox官方链接:游戏手柄触觉反馈