Create a new Model or use the one you currently have (Make sure to name it “FPS”), After this, You’re gonna need to create 2 Parts, One named “CameraBone” and the other one “HumanoidRootPart”, After you do this, Make sure to make both Parts invisible, Anchored and non-collidable (CanCollide = false)
Doing that, You are gonna create 2 Arms, The right and the left one, Make sure that they’re facing the same direction as the CameraBone. Then we’re gonna go into the Welding part:
Create a Motor6D inside CameraBone - Make it’s Part0 CameraBone and Part1 HumanoidRootPart
Create a Motor6D inside HumanoidRootPart - Name it “LeftArm” and make it’s Part0 the HumanoidRootPart and the Part1 the LeftArm
Create a Motor6D inside the HumanoidRootPart again - Name it “RightArm” and make it’s Part0 the HumanoidRootPart and the Part1 the RightArm
After you do this, Click on your model, Find the “PrimaryPart” inside the Model’s Properties and make it the HumanoidRootPart.
After all that, Create a new LocalScript inside StarterPlayerScripts (StarterPlayer > StarterPlayerScripts) and name it “FPSController”, Put the FPS Model inside of it, And then paste this code inside the script (Make sure to remove anything inside the Script before doing so):
local RunService = game:GetService("RunService")
local RenderConnection = nil
-- Initializing Model - Get the model and parent it to the Camera
local ViewportModel = script:WaitForChild("FPS")
ViewportModel.Name = "LocalViewportModel"
ViewportModel.Parent = workspace.Camera
RenderConnection = RunService.RenderStepped:Connect(function()
-- Make sure the Model exists
if ViewportModel then
-- Set the Model's CFrame to the Camera CFrame
You can also change the Camera Distance inside StarterPlayer to 0.5 (Min and Max) So it will be on First Person by default. If you want to know more about how to create your own FPS Arms/Framework, Take a look at this.