As i see the issue with your camera rotation in first person mode is due to the way the camera’s CFrame is being set in a loop, which can cause it to behave unpredictably . I’ll try to tweak your code a bit:
Avoid Infinite Loops!: Instead of using a while loop inside the InputBegan event, you can use RenderStepped to update the camera’s CFrame smoothly.
Properly Handle Camera Rotation: Ensure that the camera’s rotation is handled correctly by using CFrame methods that account for the player’s orientation.
Here’s an updated version of your script:
local uis = game:GetService("UserInputService")
local cam = workspace.CurrentCamera
local mosin = plr.Character["Right Arm"].MosinNagant
local aimcam = mosin.aimcam
local isaiming = false
uis.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton2 then
isaiming = true
cam.CameraType = Enum.CameraType.Scriptable
end
end)
uis.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton2 then
isaiming = false
cam.CameraType = Enum.CameraType.Custom
end
end)
game:GetService("RunService").RenderStepped:Connect(function()
if isaiming then
cam.CFrame = aimcam.CFrame
end
end)
I will be waiting for your feedback! I hope I’ve fixed all the bugs.
so now the camera goes back to normal, but when aiming it still rotates and the Camera is offset.
i didn’t even consider using runserv since its easier to just use task.wait but I can also see instead of placing it to change the frame in the inputbegan you put it in the runserv function, and idk why that works but thx
The camera might be rotating because it’s not locked to the character’s orientation. We can adjust the camera’s CFrame to align with the character’s HumanoidRootPart.
Here’s an updated version of the script:
local uis = game:GetService("UserInputService")
local cam = workspace.CurrentCamera
local plr = game.Players.LocalPlayer -- I dont know what is plr for you but ill keep this line of code just in case
local character = plr.Character or plr.CharacterAdded:Wait()
local humanoidRootPart = character:WaitForChild("HumanoidRootPart")
local mosin = character:WaitForChild("Right Arm"):WaitForChild("test")
local aimcam = mosin:WaitForChild("aimcam")
local isaiming = false
uis.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton2 then
isaiming = true
cam.CameraType = Enum.CameraType.Scriptable
end
end)
uis.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton2 then
isaiming = false
cam.CameraType = Enum.CameraType.Custom
end
end)
game:GetService("RunService").RenderStepped:Connect(function()
if isaiming then
local aimCFrame = humanoidRootPart.CFrame * aimcam.CFrame
cam.CFrame = aimCFrame
end
end)
Have you tried locking your mouse? and set the camera’s CFrame based on aimcam but edit it to player’s head orientation:
local uis = game:GetService("UserInputService")
local cam = workspace.CurrentCamera
local plr = game.Players.LocalPlayer
local mosin = plr.Character["Right Arm"].MosinNagant
local aimcam = mosin.aimcam
local isaiming = false
uis.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton2 then
isaiming = true
uis.MouseBehavior = Enum.MouseBehavior.LockCenter
cam.CameraType = Enum.CameraType.Scriptable
end
end)
uis.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton2 then
isaiming = false
uis.MouseBehavior = Enum.MouseBehavior.Default
cam.CameraType = Enum.CameraType.Custom
end
end)
game:GetService("RunService").RenderStepped:Connect(function()
if isaiming then
cam.CFrame = aimcam.CFrame * plr.Character.Head.CFrame:toObjectSpace(plr.Character.Head.CFrame)
end
end)
Yes, however, the humanoidrootpart is the primary component in the player model and one never knows what may occur to other components of the body. Consequently, it may be more prudent to add an additional 5 units to the Y-axis CFrame, as this would help to avoid potential issues.
In short, when you set the first-person view and change the camera position, it overlaps and as a result, you get an endless overlay of the camera position on yourself. Have you installed a 1-person view somewhere?
so each script that ive done are the one where you aim the gun, one that makes the body visible in firstperson and the one for the ViewModel(it just makes the arms rotate to where you’re facing)