UI Separation script for PC and Mobile Needed

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.

Why should it go in collaboration?

I asked if it was possible to do that.

I literally said that and said I tried almost all the scripts.

Ok now I got this

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

I think you cant do game.StaterGUI. (Because I tried that already)

Someone told me you have to do like PlayerGUI or something but I cant find that and dont know how to do that.

(Its in StaterPlayer - StartingPlayerScripts as a Local Script)

Depending on your situation using the player’s input type isn’t beneficial. You can basically tell if someone is on a laptop or tablet/phone based off their ViewportSize in pixels. If Roblox’s API descriptions hold up GuiService | Roblox Creator Documentation can be used to identify console players.

I would less worry about the exact device a player is using a more focus on the characteristics of their device because over the past few years devices have been starting to cross boundaries as technology improves.

1 Like

I am not really conserd about console

Just more about PC and Mobile.

But thank You

How would I get the characteristics of a Mobile or PC device?