Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Third Person Camera Breaking Character?

Asked by 7 years ago

The use of this script is for a third person shooter. I have added a custom character using a rig and some animations, but this script breaks the character and just has a invisible player walking around. any ideas? Thanks


wait(1) ALLOW_TOGGLE = true TOGGLE_KEY = "p" DEFAULT_ENABLED = true SMOOTH_ROTATION = true ----------------------------------------------------------------------------------------------------------------------------------------------------------------- player = game.Players.LocalPlayer mouse = player:GetMouse() enabled = DEFAULT_ENABLED c = workspace.CurrentCamera mirror = {} h = nil userInput = game:GetService("UserInputService") isMobile = false function createModel() local m = Instance.new("Model",c) m.Name = "ViewModel" local hack = Instance.new("Part",m) hack.Name = "HumanoidRootPart" hack.Transparency = 1 hack.CanCollide = false hack.Anchored = true hack.CFrame = CFrame.new() local h = Instance.new("Humanoid",m) h.Sit = true h.Changed:connect(function () h.Sit = true end) return m end function registerPart(v) local function mirrorPart(p,t) local m = p:clone() m.CanCollide = false m.Parent = model m.Transparency = (t or 0) local w = Instance.new("Weld",m) w.Part0 = p w.Part1 = m mirror[v] = m if m.Name == "Head" then m.Name = "H" end v.Changed:connect(function (property) local blist = {Position = true, CFrame = true, Parent = true, CanCollide = true} if not blist[property] then pcall(function () m[property] = v[property] end) end end) v.ChildAdded:connect(function (ch) ch.Archivable = true local cl = ch:clone() cl.Parent = m mirror[ch] = cl end) v.ChildRemoved:connect(function (ch) if mirror[ch] then mirror[ch]:Destroy() mirror[ch] = nil end end) m.Changed:connect(function () m.CanCollide = false end) end if v:IsA("BasePart") and not mirror[v] and v.Name ~= "HumanoidRootPart" then mirrorPart(v) elseif v:IsA("Hat") then local h = v:WaitForChild("Handle") mirrorPart(h) elseif v:IsA("Clothing") or v:IsA("CharacterAppearance") then v:clone().Parent = model end end function updateCam() if h then if enabled then if model then local range = model:GetExtentsSize().Y/2 local y = c.CoordinateFrame.lookVector.Y h.CameraOffset = Vector3.new(math.max(1.5,1.5-y),math.abs(y/2)-y*3.8642337322235,4-math.abs(y)) else h.CameraOffset = Vector3.new(1.5,0.5,4) end else h.CameraOffset = Vector3.new() end end end function newCharacter(char) if not char then return end mirror = {} for _,v in pairs(c:GetChildren()) do if v.Name == "ViewModel" then v:Destroy() end end if not enabled then return end model = createModel() for _,o in pairs(char:GetChildren()) do registerPart(o) end char.ChildAdded:connect(registerPart) h = nil while not h do for _,v in pairs(char:GetChildren()) do if v:IsA("Humanoid") then h = v break end end wait() end updateCam() player.CameraMaxZoomDistance = 0.5 h.Died:connect(function () if model then model:Destroy() end end) local t = char:WaitForChild("Torso") for _,v in pairs(t:GetChildren()) do if v.Name == "ShoulderCamGyro" then v:Destroy() end end if SMOOTH_ROTATION and enabled and mouse then local dir = c.CoordinateFrame.lookVector * Vector3.new(1,0,1) local b = Instance.new("BodyGyro",t) b.Name = "ShoulderCamGyro" b.maxTorque = Vector3.new(999999,999999,999999) b.cframe = CFrame.new(t.Position,t.Position+(c.CoordinateFrame.lookVector*Vector3.new(1,0,1))) b.D = 100 game:GetService("RunService").RenderStepped:connect(function () if h then h.AutoRotate = not enabled end if b and t then local dir = c.CoordinateFrame.lookVector * Vector3.new(1,0,1) b.cframe = CFrame.new(t.Position,t.Position+dir) end end) end end if mouse and ALLOW_TOGGLE and #TOGGLE_KEY == 1 and type(TOGGLE_KEY) == "string" then mouse.KeyDown:connect(function (key) if string.lower(key) == TOGGLE_KEY then enabled = not enabled if model then model:Destroy() newCharacter(player.Character) updateCam() end end end) mouse.Move:connect(updateCam) end if player.Character then newCharacter(player.Character) end local con do con = game:GetService("RunService").RenderStepped:connect(function () isMobile = userInput.TouchEnabled if isMobile then con:disconnect() SMOOTH_ROTATION = false newCharacter(player.Character) end end) end

Answer this question