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

Can't rotate character on Y axis while implementing Over-The-Shoulder Camera?

Asked by
Soban06 410 Moderation Voter
3 years ago

Hey there! I recently thought to implement an over the shoulder camera system for my game.

What is the problem?

Well, the problem lies in the camera not rotating on the Y axis. The camera does move on the x axis but I want to move it to the Y axis too.

What have you tried so far?

Well, I have tried the following in a local script. (I do not get any errors):

local UIS = game:GetService("UserInputService")

local Character = script.Parent
local Camera = workspace.CurrentCamera
local RunService = game:GetService("RunService")
local Root = Character:WaitForChild("HumanoidRootPart")
local Humanoid = Character:WaitForChild("Humanoid")
local BodyGyro = Instance.new("BodyGyro")

local CameraXSensitivity = 0.5

local IsMouseLocked = true

Humanoid.AutoRotate = false
BodyGyro.MaxTorque = Vector3.new(0, 4e5, 0)
BodyGyro.P = 4e5
BodyGyro.Parent = Root

UIS.InputBegan:Connect(function(input)
    if (input.UserInputType == Enum.UserInputType.Keyboard) then
        if (input.KeyCode == Enum.KeyCode.LeftAlt) then
            print("Unlocked")
            IsMouseLocked = not IsMouseLocked
        end
    end
end)

UIS.InputChanged:Connect(function(input)
    if (input.UserInputType == Enum.UserInputType.MouseMovement) then
        local xDelta = input.Delta.X
        local DegreeChange = math.rad(xDelta * CameraXSensitivity)
        BodyGyro.CFrame = BodyGyro.CFrame * CFrame.fromAxisAngle(Vector3.new(0, 1, 0), -DegreeChange) -- This is the part which probably needs changing.
    end
end)

RunService:BindToRenderStep("otsCamera", 201, function()
    local lookAt = (Root.CFrame * CFrame.new(0, 0, -20)).Position
    local CamStartPos = (Root.CFrame * CFrame.new(4, 4, 10)).Position
    if IsMouseLocked then
        UIS.MouseBehavior = Enum.MouseBehavior.LockCenter
    else
        UIS.MouseBehavior = Enum.MouseBehavior.Default
    end
    Camera.CameraType = Enum.CameraType.Scriptable
    Camera.CFrame = CFrame.new(CamStartPos, lookAt)
end)

Thanks for any help.

If you do not understand any part of the question please comment.

Answer this question