- UserInputService работает только на стороне клиента (в локалскрипте)
- далее, когда ты перенесешь код в локалскрипт и положишь его, например, в сервис StarterPlayerScripts, тебе нужно подождать пока прогрузится воркспейс, для этого надо писать game.Workspace:WaitForChild("firstplayer")
- и далее, если ты будешь пытаться менять позицию некого объекта на стороне клиента (из локалскрипта), то она будет меняться ТОЛЬКО у тебя, и и сервер, ни остальные клиенты видеть это изменение не будут (оно не будет реплицироваться)
- чтобы оно реплицировалось, ты либо должен уведомить сервер о таком изменении через RemoteEvent / RemoteFunction (но не передавай при этом реальные координаты, иначе это будет лазейка для эксплойтов), либо поменять владение объектом (метод SetNetworkOwnership())
и последнее, если под переменной firstplayer полагается использовать модельку другого игрока - то это вообще не так делается; модель игрока берется через Player.Character или Player.Character.PrimaryPart, а сама его позиция предпочтительно меняется через метод MoveTo() или WalkTo()
local model = game.Workspace.firstplayer
local pos1 = model:GetPivot()
local UserInputService = game:GetService("UserInputService")
UserInputService.InputBegan:Connect(function(Key)
if Key.KeyCode == Enum.KeyCode.D
then
model:PivotTo(pos1 * CFrame.new (0, 0, -5))
end
end)