I want to convert the resulting CFrame to C0 Weld (I need to convert the rotation).
script.Parent.HumanoidRootPart.Weld.C0 = cframe
I want to convert the resulting CFrame to C0 Weld (I need to convert the rotation).
script.Parent.HumanoidRootPart.Weld.C0 = cframe
Is it something like welding a part to another?
I think this is what you’re trying to find:
Part.Weld.C0 = Part.Weld.Part0.CFrame:Inverse() * Part.Weld.Part1.CFrame
(If it doesn’t work, switch up Part0 with Part1 instead and vice versa.)
Your method is quite sympathetic to me, but the part changes its position that it is very abnormal. It is necessary to make that only rotation changes.
For understanding, I will provide you with this code:
local sourcePosition = script.Parent.Point.Position
local targetPosition = nearestTarget.HumanoidRootPart.Position
local targetVector = Vector3.new(sourcePosition.X, targetPosition.Y, targetPosition.Z)
local cframe = CFrame.lookAt(sourcePosition, targetVector)
script.Parent.HumanoidRootPart.Weld.C0 = script.Parent.HumanoidRootPart.Weld.Part1.CFrame:Inverse() * cframe
Well, you could try doing:
local cframe = Weld.Part0.CFrame:Inverse() * Weld.Part1.CFrame
cframe = CFrame.new(0, 0, 0, select(4, cframe:GetComponents())
Weld.C0 = cframe
Could you provide a screenshot/image depicting the problem you’re encountering right now and what you’re trying to achieve?
Here is a video clip:
Sorry for the late response, school work. Anyways, so from what I can image, you don’t want the part to tilt upwards and roll right and that it updates always right?
Try this?
local originalC0 = humanoidRootPart.Weld.Part1.CFrame:Inverse() * humanoidRootPart.Weld.Part0.CFrame
-- assume this while loop is the loop your source code is in
while task.wait() do
local targetPos, sourcePos = target.Position, source.Position
local to = (targetPos-sourcePos)
if to:Dot(to) > 0 then -- a 0,0,0 vector would result to NaN since .Unit is
-- vector.Unit = vector/vector.Magnitude, to put it simply, NaN = vector/0
to = to.Unit
end
local lookAt = CFrame.lookAt(Vector3.zero, to)
humanoidRootPart.Weld.C0 = originalC0 * lookAt
end
local sourcePosition = script.Parent.Point.Position
local targetPosition = nearestTarget.HumanoidRootPart.Position
local targetVector = Vector3.new(sourcePosition.X, targetPosition.Y, targetPosition.Z)
local cframe = CFrame.lookAt(sourcePosition, targetVector)
script.Parent.HumanoidRootPart.Weld.C0 = cframe
This code calculates the CFrame
directly and sets it as the C0 of the Weld. The C0
property expects a CFrame, and you can assign the calculated cframe
directly without the need for additional transformations.