hmm, that's a bit tricky. I'm not that good with cframes, but you gave a good description of what you're trying to do which makes me confident my attempt may be your solution
local runService = game:GetService'RunService'
local userInput = game:GetService'UserInputService'
local camera = workspace.CurrentCamera
local player = game.Players.LocalPlayer
local char = player.Character or player.CharacterAdded:Wait()
local head = char:WaitForChild'Head'
camera.CameraType = 'Scriptable'
local camOffset1 = Vector3.new(3,1,0)
local camOffset2 = Vector3.new(0,2,7)
runService.RenderStepped:Connect(function()
local lookAt = head.CFrame * CFrame.new(camOffset1)
camera.CFrame = lookAt * CFrame.new(camOffset2)
camera.CFrame = CFrame.new(camera.CFrame.p, lookAt.p)
end)
Explanation
basically the logic behind all of this, is that you first define your shoulder offset. once you have that center point, you offset it again by how far back you want the camera away from the character. and the last line camera.CFrame = CFrame.new(camera.CFrame.p, lookAt.p) just makes sure the camera stays tilted towards the center point. hope this helped.
2 comments
Well have you played around with the camera object in Workspace? Go into a test server then try all of the different cameratypes by opening properties with the camera object selected. One of them should fit your needs.
Unity, I've made my custom camera and none of those can really help me in my situation. Thank you anyways.