Part not loading with model (even tho it exists?)

if not self.Instance:FindFirstChild("RootPart") then
	warn(self.Instance)
	self.Instance.Name = "ERWERREREERERER"
	task.delay(1, function()
		print(self.Instance.RootPart)
	end)
end

Unsure why it warns with the name changed… even tho I change name after warn.
image

But if I task.delay it shows RootPart is there.
image

Game has StreamingEnabled false, so there’s not Atomic or whatever issue here. I spawn in thousands of these, but I always get 2-3 warnings each time. And when I check workspace, the RootPart does exist. There is NEVER a case when it doesn’t exist

WaitForChild does fix the issue, but this should not be necessary

This has to deal with how server and client communicate with each other to the instance. From what I know off the top of my head some stuff on the Client-side may not be fully loaded in when a player loads into an instance. So you should yield the object until it is fully loaded in on the client side. Server-side is always prioritized in loading if im correct.

Instead of the task.delay you can just do self.Instance:WaitForChild(“RootPart”)