Advertisement
Mohhay

Custom Camera

Nov 15th, 2021
549
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.91 KB | None | 0 0
  1. --// Made by MohhayScripts
  2.  
  3.  
  4. --// Null Init
  5.  
  6. local Null = require(game:GetService("ReplicatedStorage").Null)
  7.  
  8.  
  9. --// Services
  10.  
  11. local TweenService = game:GetService("TweenService")
  12. local UserInputService = game:GetService("UserInputService")
  13.  
  14.  
  15. --// Varaibles
  16.  
  17. local Character = script.Parent
  18. local Camera = Null.Camera
  19. local Mouse = Null.Mouse
  20.  
  21. local Root = Character:WaitForChild("HumanoidRootPart")
  22. local Humanoid = Character:WaitForChild("Humanoid")
  23.  
  24. local neck = Character:WaitForChild("Head"):WaitForChild("Neck")
  25. local waist = Character:WaitForChild("UpperTorso"):WaitForChild("Waist")
  26. local originalWaist = waist.C0
  27.  
  28. local originalNeck = neck.C0
  29.  
  30. local CameraXSensitivity = 0.005
  31.  
  32. local IsMouseLocked = true
  33. local left = false
  34.  
  35. local yaw = 0
  36. local pitch = 0
  37.  
  38. local lastTween
  39.  
  40. local params = RaycastParams.new()
  41. params.FilterType = Enum.RaycastFilterType.Blacklist
  42. params.FilterDescendantsInstances = {Character}
  43.  
  44.  
  45. --// Init
  46.  
  47. Camera.CameraType = Enum.CameraType.Scriptable
  48. UserInputService.MouseIconEnabled = false
  49.  
  50. UserInputService.InputBegan:Connect(function(input)
  51.     if input.UserInputType == Enum.UserInputType.Keyboard then
  52.         if input.KeyCode == Enum.KeyCode.LeftAlt then
  53.             IsMouseLocked = not IsMouseLocked
  54.            
  55.             if Camera.CameraType == Enum.CameraType.Scriptable then
  56.                 Camera.CameraType = Enum.CameraType.Custom
  57.                 UserInputService.MouseIconEnabled = true
  58.             else
  59.                 Camera.CameraType = Enum.CameraType.Scriptable
  60.                 UserInputService.MouseIconEnabled = false
  61.             end
  62.         elseif input.KeyCode == Enum.KeyCode.Q then
  63.             left = not left
  64.         end
  65.     end
  66. end)
  67.  
  68. UserInputService.InputChanged:Connect(function(input)
  69.     if input.UserInputType == Enum.UserInputType.MouseMovement then
  70.         yaw = yaw - input.Delta.X * CameraXSensitivity
  71.         pitch = math.clamp(pitch - input.Delta.Y * CameraXSensitivity, -math.pi/2 + 0.01, math.pi/2 - 0.01)
  72.  
  73.         neck.C0 = originalNeck * CFrame.Angles(pitch / 2, 0, 0)
  74.         waist.C0 = originalWaist * CFrame.Angles(pitch / 2, 0, 0)
  75.     end
  76. end)
  77.  
  78. game:GetService("RunService"):BindToRenderStep("customCamera", 201, function()
  79.     local focus = Root.Position
  80.     local cameraCFrame = CFrame.fromOrientation(pitch, yaw, 0) * (left and CFrame.new(-3,3,10) or CFrame.new(3, 3, 10)) + Root.Position
  81.     local result = workspace:Raycast(focus, cameraCFrame.Position - focus, params)
  82.  
  83.     if result then
  84.         cameraCFrame = CFrame.fromMatrix(result.Position, cameraCFrame.RightVector, cameraCFrame.UpVector, -cameraCFrame.LookVector)
  85.     end
  86.    
  87.     if IsMouseLocked then
  88.         if lastTween then
  89.             lastTween:Pause()
  90.         end
  91.        
  92.         lastTween = TweenService:Create(Camera,TweenInfo.new(.2),{CFrame = cameraCFrame})
  93.         lastTween:Play()
  94.     else
  95.         if lastTween then
  96.             lastTween:Pause()
  97.         end
  98.        
  99.         Camera.CFrame = cameraCFrame
  100.     end
  101.    
  102.     if IsMouseLocked then
  103.         UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
  104.     else
  105.         UserInputService.MouseBehavior = Enum.MouseBehavior.Default
  106.     end
  107. end)
  108.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement