- What do you want to achieve?
I wanna make it so the gun and arms are view models in my gun system.
- What is the issue?
Upon equipping the gun the character starts flinging across the map.
- What solutions have I tried so far?
Deleting certain objects like welds or the humanoid in the arm view model. Some of them would actually fix the issue but on the other hand they would cause stuff to fall in the void or just stop working.
I have looked at other posts before posting as well as trying different tutorials for view models, different arm models, etc.
Any help is appreciated, thank you.
Video of the problem: (For some reason uploading it normally doesn’t work)
External MediaModule Script in Replicated Storage, called by the client.
local UDS_GSys = {}
local physicsService = game:GetService("PhysicsService")
local player = game:GetService("Players").LocalPlayer
local camera = game.Workspace:WaitForChild("Camera")
local defaultMaxZoom = nil
local defaultCameraType = nil
local defaultMinZoom = nil
local defaultIcon = nil
function UDS_GSys.intialize(tool, offset)
viewModel = game.ReplicatedStorage:WaitForChild("GunSystem"):WaitForChild("Viewmodel"):Clone()
viewModel.Parent = camera
if offset == nil then
warn("Missing weapon offset, autosetting in order to prevent an error.")
offset = CFrame.new(1, -1.5, -2)
end
viewModel.LeftArm.Color = player.Character:FindFirstChild("Left Arm").Color
viewModel.RightArm.Color = player.Character:FindFirstChild("Right Arm").Color
viewTool = tool:Clone()
viewTool.Parent = camera
viewTool.PrimaryPart.CFrame = viewModel.RightArm.CFrame
for i, v in pairs(viewTool:GetDescendants()) do
if v:IsA("Part") or v:IsA("MeshPart") then
v.CollisionGroup = "Viewmodel"
end
end
for i, v in pairs(viewModel:GetDescendants()) do
if v:IsA("Part") or v:IsA("MeshPart") then
v.CollisionGroup = "Viewmodel"
end
end
local joint = Instance.new("Motor6D");
joint.C0 = offset;
joint.Part0 = viewModel.RightArm;
joint.Part1 = tool.Handle;
joint.Parent = viewModel.RightArm;
defaultMaxZoom = player.CameraMaxZoomDistance
defaultCameraType = player.DevEnableMouseLock
defaultCameraType = camera.CameraType
defaultMinZoom = player.CameraMinZoomDistance
defaultIcon = player:GetMouse().Icon
player.CameraMaxZoomDistance = 0.5
camera.CameraType = Enum.CameraType.Custom
player.CameraMinZoomDistance = 0.5
player:GetMouse().Icon = "rbxassetid://0"
player:WaitForChild("PlayerGui"):WaitForChild("UDS_GSys").Enabled = true
end
function UDS_GSys.disconnect()
viewModel:Destroy()
viewTool:Destroy()
player.CameraMaxZoomDistance = defaultMaxZoom
defaultCameraType = defaultCameraType
player.CameraMinZoomDistance = defaultMinZoom
player:WaitForChild("PlayerGui"):WaitForChild("UDS_GSys").Enabled = false
end
game["Run Service"].RenderStepped:Connect(function()
if viewModel and camera:FindFirstChild("Viewmodel") and player.Character:FindFirstChild("Humanoid").Health ~= 0 then
viewModel.HumanoidRootPart.CFrame = camera.CFrame * CFrame.new(0,0,0)
else
viewModel:Destroy()
viewTool:Destroy()
end
end)
return UDS_GSys
Edits: Trying to fix the video as for some reason it wasn’t working with streamable.