Advertisement
Drvays

Body Follow Camera

Jul 4th, 2022 (edited)
47,362
2
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.22 KB | None | 3 1
  1. local Camera = game.Workspace.CurrentCamera
  2. local Player = game.Players.LocalPlayer
  3. local Mouse = Player:GetMouse()
  4.  
  5. local Angles = CFrame.Angles
  6. local aSin = math.asin
  7. local aTan = math.atan
  8. local MseGuide = true
  9. local TurnCharacterToMouse = false
  10. local HeadHorFactor = 1
  11. local HeadVertFactor = 0.6
  12. local CharacterHorFactor = 0.5
  13. local CharacterVertFactor = 0.4
  14. local UpdateSpeed = 0.5
  15.  
  16. if TurnCharacterToMouse == true then
  17. MseGuide = true
  18. HeadHorFactor = 0
  19. CharacterHorFactor = 0
  20. end
  21.  
  22. Player.CharacterAdded:Connect(function(char)
  23. local Character = char
  24. local Head = Character:WaitForChild("Head")
  25. local Humanoid = Character:WaitForChild("Humanoid")
  26. local HumanoidRootPart = Character:WaitForChild("HumanoidRootPart")
  27. local IsR6 = (Humanoid.RigType.Value==0)
  28. local Torso = (IsR6 and Character:WaitForChild("Torso")) or Character:WaitForChild("UpperTorso")
  29. local Neck = (IsR6 and Torso:WaitForChild("Neck")) or Head:WaitForChild("Neck")
  30. local Waist = (not IsR6 and Torso:WaitForChild("Waist"))
  31.  
  32. local NeckOrgnC0 = Neck.C0
  33. local WaistOrgnC0 = (not IsR6 and Waist.C0)
  34. Neck.MaxVelocity = 1/3
  35. game:GetService("RunService").RenderStepped:Connect(function()
  36. local CameraCF = Camera.CoordinateFrame
  37. if ((IsR6 and Character["Torso"]) or Character["UpperTorso"])~=nil and Character["Head"]~=nil then
  38. local TorsoLV = Torso.CFrame.lookVector
  39. local HdPos = Head.CFrame.p
  40. if IsR6 and Neck or Neck and Waist then
  41. if Camera.CameraSubject:IsDescendantOf(Character) or Camera.CameraSubject:IsDescendantOf(Player) then
  42. local Dist = nil;
  43. local Diff = nil;
  44. if not MseGuide then
  45. Dist = (Head.CFrame.p-CameraCF.p).magnitude
  46. Diff = Head.CFrame.Y-CameraCF.Y
  47. if not IsR6 then
  48. Neck.C0 = Neck.C0:lerp(NeckOrgnC0*Angles((aSin(Diff/Dist)*HeadVertFactor), -(((HdPos-CameraCF.p).Unit):Cross(TorsoLV)).Y*HeadHorFactor, 0), UpdateSpeed/2)
  49. Waist.C0 = Waist.C0:lerp(WaistOrgnC0*Angles((aSin(Diff/Dist)*CharacterVertFactor), -(((HdPos-CameraCF.p).Unit):Cross(TorsoLV)).Y*CharacterHorFactor, 0), UpdateSpeed/2)
  50. else
  51. Neck.C0 = Neck.C0:lerp(NeckOrgnC0*Angles(-(aSin(Diff/Dist)*HeadVertFactor), 0, -(((HdPos-CameraCF.p).Unit):Cross(TorsoLV)).Y*HeadHorFactor),UpdateSpeed/2)
  52. end
  53. else
  54. local Point = Mouse.Hit.p
  55. Dist = (Head.CFrame.p-Point).magnitude
  56. Diff = Head.CFrame.Y-Point.Y
  57. if not IsR6 then
  58. Neck.C0 = Neck.C0:lerp(NeckOrgnC0*Angles(-(aTan(Diff/Dist)*HeadVertFactor), (((HdPos-Point).Unit):Cross(TorsoLV)).Y*HeadHorFactor, 0), UpdateSpeed/2)
  59. Waist.C0 = Waist.C0:lerp(WaistOrgnC0*Angles(-(aTan(Diff/Dist)*CharacterVertFactor), (((HdPos-Point).Unit):Cross(TorsoLV)).Y*CharacterHorFactor, 0), UpdateSpeed/2)
  60. else
  61. Neck.C0 = Neck.C0:lerp(NeckOrgnC0*Angles((aTan(Diff/Dist)*HeadVertFactor), 0, (((HdPos-Point).Unit):Cross(TorsoLV)).Y*HeadHorFactor), UpdateSpeed/2)
  62. end
  63. end
  64. end
  65. end
  66. end
  67. if TurnCharacterToMouse == true then
  68. Humanoid.AutoRotate = false
  69. HumanoidRootPart.CFrame = HumanoidRootPart.CFrame:lerp(CFrame.new(HumanoidRootPart.Position, Vector3.new(Mouse.Hit.p.x, HumanoidRootPart.Position.Y, Mouse.Hit.p.z)), UpdateSpeed / 2)
  70. else
  71. Humanoid.AutoRotate = true
  72. end
  73. end)
  74. end)
Advertisement
Comments
Add Comment
Please, Sign In to add comment
Advertisement