Not sure if this is intended behaviour

Possible Bug #1: UserInputService.InputChanged doesnt seem to fire when the input changes

Possible Bug #2: If you pass an InputObject as an argument to a RemoteEvent, it will not pass through

Bug #2: (Will always print true)

--NOTE: FILTERINGENABLED IS SET TO FALSE
--Serverscript in workspace:

local event = Instance.new("RemoteEvent",workspace)
wait(1)
event.OnServerEvent:connect(function(player, inputObject)
	local isNil = (inputObject == nil)
	print("inputobject is nil? = "..tostring(isNil))
end)

--LocalScript in StarterGui:
uis = game:GetService("UserInputService")

uis.InputBegan:connect(function(inputObject)
	workspace.RemoteEvent:FireServer(inputObject)
end)

You can’t send instances with the Remote* objects. I’m pretty sure it’s intended.

The only time using an instance as an argument will work is if the object is both on the client and the server. Like if I were to send “workspace.BasePlate”.

If you want to handle input, handle the actual input part on the client - then use the Remote* objects to send commands to the server.