Why whenever I press any buttons on my VR controller, it gets registered about half a second later? Roblox is the only game having this delay.
Example:
Script (If interested)
userInputService = game:GetService("UserInputService")
controllerLeft = workspace.Controllers.Quest2Left
controllerRight = workspace.Controllers.Quest2Right
hitboxes = {workspace.Controllers.Quest2Left.Hitbox, workspace.Controllers.Quest2Right.Hitbox}
pickups = workspace.Pickups:GetChildren()
holding = {nil, nil}
-- Grip = ButtonR1 and ButtonL1
-- Trigger = ButtonR2 and ButtonL2
-- Stick = ButtonR3 and ButtonL3
function pickUp(controller) -- 1 = Left, 2 = Right
print("pickUp() called for controller", controller)
local overlaps = workspace:GetPartBoundsInBox(hitboxes[controller].CFrame, hitboxes[controller].Size)
for _,v in pairs(overlaps) do
if table.find(pickups, v) then
if controller == 1 and holding[2] == v then holding[2] = nil
elseif controller == 2 and holding[1] == v then holding[1] = nil
end
v.Anchored = true
v.Color = Color3.new(0.333333, 1, 1)
holding[controller] = v
v.Parent = hitboxes[controller].Parent
break
end
end
end
function drop(controller) -- 1 = Left, 2 = Right
print("drop() called for controller", controller)
local object = holding[controller]
if object then
object.Color = Color3.new(1, 1, 1)
object.Anchored = false
object.Parent = workspace.Pickups
end
end
userInputService.InputBegan:Connect(function(input)
print(input.KeyCode)
if input.KeyCode == Enum.KeyCode.ButtonL1 then
pickUp(1) -- 1 = Left, 2 = Right
elseif input.KeyCode == Enum.KeyCode.ButtonR1 then
pickUp(2) -- 1 = Left, 2 = Right
end
end)
userInputService.InputEnded:Connect(function(input)
if input.KeyCode == Enum.KeyCode.ButtonL1 then
drop(1) -- 1 = Left, 2 = Right
elseif input.KeyCode == Enum.KeyCode.ButtonR1 then
drop(2) -- 1 = Left, 2 = Right
end
end)
Currently can’t see much of an issue but I’d say this could be a connection issue?
Are your VR controllers wireless? Are items being picked up on the server/client?
Lag can appear almost anywhere if there is any sort of connection.
Could be that you’re picking up a item on the client but the server has to make the player the network owner first before they can interact with said physics object.
Could be that (if using wireless VR) it takes a few microseconds for the signal to reach your computer and then get processed in the game.
I doubt if the script has any sorts of bad performance, you could try to monitor connections/latency and see what the results are there.
The only input that has this latency issue is the VR controller’s grip and trigger button, the A, B, Y or X button work fine without noticeable latency. It’s much more noticeable when playing the game than on the video tho.
I have to hold down the trigger / grip button for a short time, if I press it and let go immediately the input doesn’t even get registered.
I know for a fact that some triggers have analog input
(meaning that their input isn’t just 0 and 1 like A/B/X/Y but can also be something in between, joysticks on controllers are also analog).
It could be that your controller only detects input when the trigger is let’s say… 80% pressed.
There is a way to detect how far a trigger is pressed down in Roblox (assuming the trigger is analog).
If I remember well this was done through a InputObject.Position property?
The same way you read the mouse delta/position or joystick position with UserInputService can be used to detect trigger position.
I experimented with the InputBegan, InputEnded and InputChanged events, and my result was really confusing;
InputBegan isn’t fired when I press the trigger / grip for a short time, InputEnded however does, with a delay.
I’m bad at explaining so heres a video: https://drive.google.com/file/d/16tYSBjMiNyyABUFcSiFR5fY1rYWL5NJv/view?usp=sharing