I was prototyping my camera script but came to an issue described in tittle
I do use a custom character loading system, and I do have CharacterAutoLoads disabled.
Camera seems to be stuck at position of StarterCharacter somehow
--!strict
--!optimize 2
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local PreRender = RunService.PreRender::RBXScriptSignal
---
local SetProperty:(ins:Instance,prop:string,val:any)->()
local GetProperty:(ins:Instance|RBXScriptSignal,prop:string)->any
local GetPropertyChangedSignal:(ins:Instance,property: string)->RBXScriptSignal
local Connect = PreRender.Connect::<A>(signal:RBXScriptSignal,func:A)->RBXScriptConnection
local IsA:(ins:Instance,class:string)->boolean
local FindFirstChildWhichIsA:(className: string, recursive: boolean?)->Instance?
local Wait:(signal:RBXScriptSignal)->...any
xpcall(function():()
(game::any)[nil]=nil
end,function():()
SetProperty = debug.info(2,"f")
end)
xpcall(function():()
return (game::any)[nil]
end,function():()
GetProperty = debug.info(2,"f")
end)
local Player = GetProperty(Players,"LocalPlayer")::Player
local Camera = GetProperty(workspace,"CurrentCamera")::Camera
GetPropertyChangedSignal = GetProperty(Camera,"GetPropertyChangedSignal")
IsA = GetProperty(Camera,"IsA")
FindFirstChildWhichIsA = GetProperty(Camera,"FindFirstChildWhichIsA")
local _temp_signal_ref = GetPropertyChangedSignal(Camera,"CameraType")
Wait = _temp_signal_ref.Wait
Wait(_temp_signal_ref)
SetProperty(Camera,"CameraType",Enum.CameraType.Scriptable)
SetProperty(UserInputService,"MouseBehavior",Enum.MouseBehavior.LockCenter)
local BasePart_Center:BasePart
Connect(GetPropertyChangedSignal(Camera,"CameraSubject"),function():()
warn("Huh")
end)
local CameraSubject = GetProperty(Player,"Character") or Wait(GetProperty(Player,"CharacterAdded")::RBXScriptSignal)
BasePart_Center=CameraSubject:WaitForChild("HumanoidRootPart")::BasePart
local camAngleX = 0
local camAngleY = 0
local function CameraDelta(deltaTime:number):()
local delta = UserInputService:GetMouseDelta()
camAngleX -= delta.X * 0.3
camAngleY = math.clamp(camAngleY - delta.Y * 0.3, -80, 80)
-- rotate camera
local rot = CFrame.Angles(0, math.rad(camAngleX), 0) * CFrame.Angles(math.rad(camAngleY), 0, 0)
-- position at head
Camera.CFrame = CFrame.new(BasePart_Center.Position) * rot
end
Connect(PreRender,CameraDelta)
Character loading script (for context)
local Players = game:GetService("Players")
local StarterPlayer = game:GetService("StarterPlayer")
local StarterCharacter = StarterPlayer.StarterCharacter
local function PlayerAdded(plr:Player):()
local char = StarterCharacter:Clone()
char.Name = plr.Name
char.Parent = workspace
plr.Character = char
end
Players.PlayerAdded:Connect(PlayerAdded)
for i,v in Players:GetPlayers() do
PlayerAdded(v)
end