I think the title is pretty much self-explanatory. I haven’t seen anyone comparing the two methods but I have read in a reply to a specific topic that Instance:PivotTo(CF) is better than using Instance.CFrame = CF
I understand that if it is faster it’s probably only by a minuscule amount, but I just wanna know.
.CFrame is used to change the cframe of an instance, but if you try this on a model, it won’t work or it will return an error
:PivotTo() previously called :SetPrimaryPartCFrame() is a function used to set the primary part cframe, usually a model have a primary part, and you use this function to set the cframe of a model
One thing you should understand is: model.PrimaryPart.CFrame = cframe will set the primary part cframe only, the entire model won’t move
model:PivotTo(cframe) will move the entire model cframe to the cframe
Now if you say part:PivotTo it returns an error, as the part does not have a primary part, the instance itself is a part
There are no performance benefits, but the you cannot use .CFrame on a model to move it entirely
You can definitely use :PivotTo() to change an Instance’s CFrame. I tried it with a regular part before, and it produced same results. I had just wondered if there were any performance benefits, whether if you used it in cases where it sets the CFrame only once, or multiple times for a moving part.
PivotTo works with most BaseParts, it works for things called PVInstances which are basically objects that have a physical location in the world.
From testing I’ve noticed PivotTo is not completely synchronous, is delayed (by a frame?) and is buggy. I recommend using SetPrimaryPartCFrame instead.
SetPrimaryPartCFrame has been superseded by PivotTo. If it comes down to performance you should always use PivotTo over SetPrimaryPartCFrame. If there is any delay comparison between PivotTo and SetPrimaryPartCFrame, please replicate the issue and forward it to the Roblox team, then I’m sure they will take a look at it.
Though it’s very possible that my benchmark is just improper, it’s very simple and there are probably better methods for more accuracy.
-- Properties
local StartTime = os.clock()
local Amount = 1000
for _ = 1, Amount do
workspace.Dummy:PivotTo( workspace.Dummy:GetPivot() * CFrame.new(0.5, 0, 0) )
end
print('PivotTo: '.. os.clock() - StartTime)
-- Properties
local StartTime = os.clock()
for _ = 1, Amount do
workspace.Dummy:SetPrimaryPartCFrame( workspace.Dummy:GetPrimaryPartCFrame() * CFrame.new(0.5, 0, 0) )
end
print('SetPrimaryPartCFrame: '.. os.clock() - StartTime)
(I think I should’ve used an amount lesser than 1000, if someone can actually benchmark the difference between using :PivotTo() instead of :SetPrimaryPartCFrame for models and Instance.CFrame = CF using a more precise system that would be pretty cool.)
:PivotTo() is most often used for models only, however it might be working for normal parts too, but CFrame and Position and Orientation are used for parts
Every part and model has a pivotPoint, imagine it being the equivalent of a GUI object’s anchorpoint.
It’s very useful if you wish to rotate for example a door, because you can set the pivotpoint of the door-part to the side, without the need of a hinge.