UI Separation script for PC and Mobile Needed

I have seen this once many times here on DevForum before but it does not seem to work.

I am trying to seperate PC UI for mobile UI.

I have tried several scripts and they all dont seem to work.

Can someone help?

Edit:

New Problem

Here is the current script

local UserInputService = game:GetService("UserInputService")

function ReturnDevice()
	if UserInputService.KeyboardEnabled then
		script.Parent.Loading1_PC.Enabled = true
	elseif UserInputService.GamepadEnabled then
		print("No")
	elseif UserInputService.KeyboardEnabled and UserInputService.TouchEnabled then
		script.Parent.Loading1_PC.Enabled = true
	elseif UserInputService.TouchEnabled then
		script.Parent.Loading1.Enabled = true
	else
		return false
	end
end

So the loading screen does not show but the LoadingScreen scripts work and both UI’s appear.
(There in separate ScreenGUI’s)

This is on Mobile and PC.

The script is in StarterGUI as a Local Script.

I think its not working because of where it is.

Would you mind showing me one of the scripts and if you have any errors while running the script?

I had no errors but I dont remeaber the script let me try to find it

Here

Try this video: How to Detect which Platform a Player is Playing on in Roblox Studio (Moblie/Xbox/PC) - YouTube this will detect the player device and you can change this code to work with your project.

local UserInputService = game:GetService("UserInputService")

function ReturnDevice()
	if UserInputService.KeyboardEnabled then
		return "Keyboard"
	elseif UserInputService.GamepadEnabled then
		return "Gamepad"
	elseif UserInputService.TouchEnabled then
		return "Mobile"
	else
		return false
	end
end

Suppose you can try something similar to this?

1 Like

Ok testing that script right now.

Yes! It works Thank You so much

1 Like

Your script does not work for a laptop with touchscreen.

local UserInputService = game:GetService("UserInputService")

function ReturnDevice()
	if UserInputService.KeyboardEnabled then
		script.Parent.Loading1_PC.Enabled = true
	elseif UserInputService.GamepadEnabled then
		print("No")
	elseif UserInputService.TouchEnabled then
		script.Parent.Loading1.Enabled = true
	else
		return false
	end
end

Should I add another elseif statement saying if they have Keyborad and Touch?

And how would I make that?

might need some tweaking but this is what i’ve done in the past

1 Like

Ya just looked at it some more it doesnt work at all.

So the loadingscreen doesnt pop up but for mobile and PC the scripts work

What does not work?
image

1 Like

No I am telling you about my script

I think your script won’t work for UI.

Wait a minute @SillyMeTimbers where should I put the script.

Right now its a Local Script in StarterGUI

local KeyboardEnabled = game:GetService("UserInputService").KeyboardEnabled
local AccelerometerEnabled = game:GetService("UserInputService").AccelerometerEnabled
local GyroscopeEnabled = game:GetService("UserInputService").GyroscopeEnabled
local GamepadEnabled = game:GetService("UserInputService").GamepadEnabled
local TouchEnabled = game:GetService("UserInputService").TouchEnabled
local IsTenFootInterface = game:GetService("GuiService"):IsTenFootInterface()


local Data = {
	KeyboardEnabled,
	AccelerometerEnabled,
	GyroscopeEnabled,
	GamepadEnabled,
	TouchEnabled,
	IsTenFootInterface
}
if Data == nil then return {"error",{"error"}} end
if #Data ~= 6 then return {"error",{"error"}} end
local Points={pc=0, mobile=0, tablet=0, console=0}
if Data[1] then -- Keyboard
	Points.pc += 1
end
if Data[2] then -- Accelerometer
	Points.mobile += 1
	Points.tablet += 1
end
if Data[3] then -- Gyroscope
	Points.console += 1
end
if Data[4] then -- Gamepad
	Points.mobile += 1
	Points.tablet += 1
end
if Data[5] then -- Touch
	Points.console += 1
end
if Data[6] then -- IsTenFootInterface
	Points.console = math.huge
end
local old = {"error", 0}
local others = {}
for i,v in pairs(Points) do
	if v > old[2] then
		old = {i, v}
	end
end
for i,v in pairs(Points) do
	if v == old[2] and i ~= old[1] then
		table.insert(others, i)
	end
end


local Platform = {old[1], others}
if #Platform[2] ~= 0 then
	print("You are probably on: "..Platform[1].." or "..table.concat(Platform[2], " or "))
else
	print("You are probably on: "..Platform[1])
end


if table.find(Platform[2], "pc") or Platform[1] == "pc" then
	-- Give PC UI
elseif table.find(Platform[2], "mobile") or Platform[1] == "mobile" then
	-- Give Mobile UI
end

I have modified it to be on the client only, put it in StarterPlayer → StarterPlayerScripts ; (As a localscript)

by tweaking I meant changing how many points a single determinant gives to be more accurate

It also seems like it detects mobile as console so maybe add points based on the size of the screen to differentiate between the two

1 Like

As local script or regular?

I think local right

Yeah it doesnt work.

I think we have to use

local UserInputService = game:GetService("UserInputService")

function ReturnDevice()
	if UserInputService.KeyboardEnabled then
		script.Parent.Loading1_PC.Enabled = true
	elseif UserInputService.GamepadEnabled then
		print("No")
	elseif UserInputService.TouchEnabled then
		script.Parent.Loading1.Enabled = true
	else
		return false
	end
end

But with a few Edits.

  1. Where should I put it?
  2. Make it so if they have Keyboard and Touchenabled that PC UI still shows. Like does and work in Lua?

What do you mean it doesnt work, it works fine for me… this script is essentially the same thing

Please consider researching on the internet before asking, and the second question you asked should go in collabration, not script help.