How to make an eyes mechanism in 2D

Hello, guys! So, I make an eye mechanism with GUI, which is a drag knob that converts orientation to position (because of 2D so, I will make plane constraints). I have scripted it, but it doesn’t appear in GUI when clicked on the hitbox.

So, watch an example of a video:

An Example Video

There is an example of a script also:

local mainModel = script.Parent
local faceGui = script:WaitForChild("BrandNewEyesRotatorGui")

local Click = mainModel.HitBox:WaitForChild("ClickDetector")
local remote = mainModel:WaitForChild("Remote")
local controlledBy = mainModel:WaitForChild("ControlledBy")

local defaultPositionAxis = Vector3.new(0, 0, 0)
local XPositionLimit = 0
local YPositionLimit = 0

local hadScannedAxes = false
local debounce = true
local guiEvent = nil
local XAxes = {}
local YAxes = {}

local function scanAxes(FaceModel)
	local XTable = {}
	local YTable = {}
	for _, attachment in pairs(FaceModel:GetDescendants()) do
		if attachment:IsA("Attachment") then
			if attachment.Name == "XAxisMain" then
				table.insert(XTable, attachment)
			end
			if attachment.Name == "YAxisMain" then
				table.insert(YTable, attachment)
			end
		end
	end
	
	return XTable, YTable
end

local function calculatePosition(XLimit, YLimit, XPos, YPos)
	local XPositionCFrame = XPos * XLimit
	local YPositionCFrame = YPos * YLimit
	local XPosition = defaultPositionAxis + Vector3.new(XPositionCFrame, 0, 0)
	local YPosition = defaultPositionAxis + Vector3.new(0, YPositionCFrame, 0)
	
	return XPosition, YPosition
end

local function calculateGUIPosition(XLimit, YLimit, XPosition, YPosition)
	local XPositionCFrame = (XPosition - defaultPositionAxis).Y
	local YPositionCFrame = -((YPosition - defaultPositionAxis).Z)
	local XPos = XPositionCFrame / XLimit
	local YPos = YPositionCFrame / YLimit
	
	return XPos, YPos
end

local function repositionEyes(XPos, YPos)
	local XPosition, YPosition = calculatePosition(XPositionLimit, YPositionLimit, XPos, YPos)
	for _, Axis in pairs(XAxes) do
		Axis.Position = XPosition
	end
	for _, Axis in pairs(YAxes) do
		Axis.Position = YPosition
	end
end

local function GUIClosed()
	if controlledBy.Value ~= nil then
		print("Closing control from " .. controlledBy.Value.Name .."...")
		controlledBy.Value = nil
	else
		print("Unused Controller")
	end
end

local function toggled(Player)
	if debounce == true then
		if controlledBy.Value == nil then
			debounce = false
			local playerGUI = Player:FindFirstChild("PlayerGui")
			local existingFaceGUI = playerGUI:FindFirstChild(faceGui.Name)
			if existingFaceGUI == nil then
				print("Face controller toggled.")
				controlledBy.Value = Player
				XAxes, YAxes = scanAxes(mainModel)
				local GUIClone = faceGui:Clone()
				GUIClone.Parent = playerGUI
				local remoteReference = GUIClone:FindFirstChild("RemoteEventReference")
				remoteReference.Value = remote
				
				guiEvent = GUIClone.Changed:Connect(function()
					if not GUIClone:IsDescendantOf(game) then
						GUIClosed()
						guiEvent:Disconnect()
						print("Disconnected")
					end
				end)
			else
				print(Player.Name .. "is controlling another face of the other engines.")
			end
			debounce = true
		else
			print("Already controlled by ".. controlledBy.Value.Name)
		end
	end
end

local function onRemote(Player, Func, FuncFaceModel, ...)
	if FuncFaceModel == mainModel then
		if Func == "AskForPosition" then
			if #XAxes > 0 and #YAxes > 0 then
				local XPosition = nil
				local YPosition = nil
				for _, Axis in pairs(XAxes) do
					XPosition = Axis.Position
					break
				end
				for _, Axis in pairs(YAxes) do
					YPosition = Axis.Position
					break
				end
				local XPos, YPos = calculateGUIPosition(XPositionLimit, YPositionLimit, XPosition, YPosition)
				remote:FireAllClients("GUIReposition", FuncFaceModel, (XPos / 2) + 0.5, (YPos / 2) + 0.5)
			else
				remote:FireAllClients("RequestCloseGUI", mainModel)
			end
		end
		if Func == "RepositionEyes" then
			if #XAxes > 0 and #YAxes > 0 then
				repositionEyes(...)
			else
				remote:FireAllClients("RequestCloseGUI", mainModel)
			end
		end
		if Func == "GUIClosed" then
			GUIClosed()
		end
	end
end

Click.MouseClick:Connect(toggled)
remote.OnServerEvent:Connect(onRemote)

So, I want to script that GUI appeared when clicked on. How do I make it?