Using players arms to make a viewmodel

invalid argument. I’m messing with values to see If I can get it to work

I do wanna say though. I see what you are trying to do but when looking up in first person the tool comes very close to the screen

wait what

no like RightShoulder.C0 = RightShoulder.C0.Position + Camera.CFrame.Rotation

(also whats the specific error?)

that’s what I have

also I already have code that makes the arms face the same direction as the camera. I just need them to line up

I need the arms to be a bit more back

ok what is the code that you’re using rn?

also

RightShoulder.C0 = CFrame.new(RightShoulder.C0.Position) + Camera.CFrame.Rotation```

server side: (so everyone can see there are looking up)

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ArmsEvent = ReplicatedStorage.ArmsEvent

game.Players.PlayerAdded:Connect(function(player)
  player.CharacterAdded:Connect(function(character)
    local RenderService = game:GetService("RunService")
    local ToolMotor = Instance.new("Motor6D")
    ToolMotor.Parent = character:WaitForChild("HumanoidRootPart")
    local mousePosition = Vector3.new(0, 0, 0)

    ArmsEvent.OnServerEvent:Connect(function(plr, position)
      if plr == player then
        mousePosition = position
      end
    end)

	local RightShoulder, LeftShoulder, ToolGrip = character.UpperTorso:WaitForChild("RightShoulder"), character.UpperTorso:WaitForChild("LeftShoulder"), ToolMotor

    RenderService.Heartbeat:Connect(function()
      local X = -(math.asin((character.HumanoidRootPart.Position - mousePosition).unit.y))

      local _, Y, Z = RightShoulder.C0:ToEulerAnglesXYZ()
      local OldRightC0 = RightShoulder.C0
      RightShoulder.C0 = CFrame.new(RightShoulder.C0.Position) * CFrame.Angles(X, Y, Z)
      local Difference = OldRightC0.Position - RightShoulder.C0.Position

      local _, Y, Z = ToolGrip.C0:ToEulerAnglesXYZ()
      ToolGrip.C0 = CFrame.new(ToolGrip.C0.Position) * CFrame.Angles(X, Y, Z)

      local _, Y, Z = LeftShoulder.C0:ToEulerAnglesXYZ()
      LeftShoulder.C0 = CFrame.new(LeftShoulder.C0.Position) * CFrame.Angles(X, Y, Z)
    end)
  end)
end)

Am I just gonna have to use a view model?

did you try the new line of code I gave?

and also, can’t you just rip the arms off and use that as the viewmodel?

HOL UP:

I just realized I could disable the waist motor 6D. it still gives animation but doesn’t pull the character.
gg!


code: has bugs and tweaking needed but it works!

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local RunService = game:GetService("RunService")

local Character = script.Parent
local Humanoid = Character:FindFirstChildWhichIsA("Humanoid")
local Camera = workspace.CurrentCamera
local Player = game.Players.LocalPlayer
local Events = ReplicatedStorage.Events

local mouse = Player:GetMouse()


local UpperTorso = Character:FindFirstChild("UpperTorso")
local RightShoulder = Character:FindFirstChild("UpperTorso").RightShoulder
local Waist = Character:FindFirstChild("UpperTorso").Waist
Waist.Enabled = false
UpperTorso.CanCollide = false
RunService.RenderStepped:Connect(function()
	if Waist:IsA("Motor6D") then
		UpperTorso.CFrame = Camera.CFrame
	end
	for i, part in pairs(Character:GetChildren())do
		if string.match(part.Name, "Arm")or string.match(part.Name, "Hand") then
			part.LocalTransparencyModifier = 0
		end
	end
end)
1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.