I am trying to create a joint between two parts such that the joint's position is in the middle of their CFrames. My issue is that I have one segment of code that will offset the joint and maintain the correct rotations, but the part's positions will be changed when I unachor the parts. And I have another segment of code that will maintain the position of the part's but not their rotation. I can't find a middle ground between the two.
Here is the code that maintains rotation, and also a gif of what I mean: GIF: https://gyazo.com/b8ff8876433638e36816aa599689e5df
function weld(part0, part1) local motor6d = Instance.new("Motor6D") motor6d.Part0 = part0 motor6d.Part1 = part1 motor6d.Name = part1.Name local jointPosition = part0.CFrame:Lerp(part1.CFrame, 0.5) local jointOffset = jointPosition local offset = jointOffset:toObjectSpace(part0.CFrame) motor6d.C1 = offset motor6d.C0 = offset:Inverse() motor6d.Parent = part0 createVisual(part0, motor6d.C0) end
Here is the code that maintains position, and a gif of what I mean: GIF: https://gyazo.com/62dd6d148bcd73e63b3e148ebd0d9096
function weld(part0, part1) local motor6d = Instance.new("Motor6D") motor6d.Part0 = part0 motor6d.Part1 = part1 motor6d.Name = part1.Name local jointPosition = CFrame.new((part0.Position + part1.Position) / 2) local jointRotation = CFrame.Angles(math.rad(part1.Orientation.X), math.rad(part1.Orientation.Y), math.rad(part1.Orientation.Z)) local jointOffset = jointPosition * jointRotation local offset = jointOffset:toObjectSpace(part0.CFrame) motor6d.C1 = offset motor6d.C0 = offset:Inverse() motor6d.Parent = part0 createVisual(part0, motor6d.C0) end