For this you will probably want to use CFrame.lookAt(pos: Vector3, lookAt: Vector3)
Basically you just need to get the position of the blue part, then to make it sit just above it, add half of the size.Y to the Y position, and a backwards offset, then just put the position of the blue part as the second argument.
-- change the Y component to something else if you want it to be higher up. Z component is how far back it is.
local offset = Vector3.new(0, bluePart.Size.Y / 2, 3)
local partPos = bluePart.Position
cam.CFrame = CFrame.lookAt(partPos + offset, partPos)
If you are going to be manipulating the camera, it will need to be a LocalScript.
you will need to set the camera.CameraType = Enum.CameraType.Scriptable, and it would probably be easiest to set up a RunServive.RenderStepped loop to update the camera each frame. It’ll look something like this:
local RunService = game:GetService("RunService")
local cam = workspace.CurrentCamera
local bluePart = workspace.BluePart
-- the offset value may need to be modified based on how you are going to be moving the part
local offset = Vector3.new(0, bluePart.Size.Y / 2, 3)
cam.CameraType = Enum.CameraType.Scriptable
RunService.RenderStepped:Connect(function()
local partPos = bluePart.Position
cam.CFrame = CFrame.lookAt(partPos + offset, partPos)
end)