You could try creating a part to each side on both of these hexagons and make that part their root part. Then, once you need to put the hexagons together you can Hexagon1:PivotTo(Hexagon2.PrimaryPart.Position). Also, make sure that they properly welded to the RootPart
simple geometry. i made a mistake. it should be 2 times the door distance for the other hex’s center
but we can rename the variable to represent ‘centerToCenterDistance’
then your original model has a 30 degree rotation offset (flat based vs angle based)
you can simply add 30 degrees to adjust for that CFrame.Angles(0, math.rad(30 + 60 * whichDoor), 0)
you mixed up the Vector3 and CFrame types in the intermediate steps, here is the correct one
local room1 = workspace.r1
local room2 = workspace.r2
local centerToCenterDistance = 10
local whichDoor = 0 -- 0 - 5
local rotatedRelativePosition = CFrame.Angles(0, math.rad(rotationalOffset + 60 * whichDoor), 0) * Vector3.new(0, 0, centerToCenterDistance) -- notice this is CFrame * Vector3, result is Vector3
local desiredPivot = room1:GetPivot() * CFrame.new(rotatedRelativePosition) -- notice this is CFrame * CFrame, meaning to just move the pivot, do not rotate
room2:PivotTo(desiredPivot)