HumanoidRootPart Position never changes in script but does in the world

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

Ok, I actually found a solution, and I overthink too much, I think.
CharacterAutoLoads was actually enabled
So my custom character system clashes with native implementation
causing a race condition and silencing the signal

I had to set CharacterAutoLoads to false, and it fixed everything.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.