Struggling with UI scales

Currently I’m doing a Welcoming GUI and I use TweenService to animate Buttons. To scale UIs, I’ve used an AutoScale Lite plugin so result in Roblox Studio was same as in Roblox game. But when I started Tweening UIs, the plugin seem to be not working after the change of their Position

In Studio result:

Ingame result:

On other device result:

I was wondering how do I make UIs to stay properly with out using any plugins, since it’s completely useless when UI is getting tweened.

The script if needed:

local Players = game:GetService('Players')
local PlayerGui = Players.LocalPlayer.PlayerGui

local StarterGui = game:GetService('StarterGui')
local TweenService = game:GetService('TweenService')
local TeleportService = game:GetService('TeleportService')
local TeleportGUI = game.ReplicatedStorage:WaitForChild('GUI')

local PurpleFrame = PlayerGui.MenuGUI:WaitForChild('PurpleFrame')
local Logo = PlayerGui.MenuGUI:WaitForChild('Logo')
local Pattern = PlayerGui.MenuGUI:WaitForChild('Pattern')
local LoadingBar = Pattern.LoadingBar
local Bar = LoadingBar.Bar
local Details = Pattern.Details
local Starfall = Pattern.Starfall
local Hearing = PlayerGui.MenuGUI.Hearing
local Sensitive = PlayerGui.MenuGUI.Sensitive
local Contentt = PlayerGui.MenuGUI.Contentt

local MenuButtons = PlayerGui.Buttons

local UpperFrame = MenuButtons.UpperFrame
local Singleplayer = MenuButtons.Singleplayer
local Multiplayer = MenuButtons.Multiplayer
local Credits = MenuButtons.Credits
local Rewards = MenuButtons.Rewards

local Song = game.Workspace.Main




local ButtonTweenInfo = TweenInfo.new(
	1,
	Enum.EasingStyle.Quad,
	Enum.EasingDirection.InOut,
	0,
	false
)

local ButtonTweenInfo2 = TweenInfo.new(
	0.3,
	Enum.EasingStyle.Quad,
	Enum.EasingDirection.InOut,
	0,
	false
)



local PurpleFrameTween1 = TweenService:Create(PurpleFrame, ButtonTweenInfo, {Position = UDim2.new(-1.6, 0, -2.6, 0)})
local PurpleFrameTween2 = TweenService:Create(PurpleFrame, ButtonTweenInfo, {Position = UDim2.new(0, -671, 0, -972)})

local LoadingBarTween1 = TweenService:Create(LoadingBar,ButtonTweenInfo, {BackgroundTransparency = 0})
local LoadingBarTween2 = TweenService:Create(LoadingBar,ButtonTweenInfo, {BackgroundTransparency = 1})

local BarTween1 = TweenService:Create(Bar,ButtonTweenInfo, {BackgroundTransparency = 0})
local BarTween2 = TweenService:Create(Bar,ButtonTweenInfo, {BackgroundTransparency = 1})

local LogoTween1 = TweenService:Create(Logo,ButtonTweenInfo, {ImageTransparency = 0})
local LogoTween2 = TweenService:Create(Logo,ButtonTweenInfo, {ImageTransparency = 1})

local StarfallTween1 = TweenService:Create(Starfall,ButtonTweenInfo, {TextTransparency = 0})
local StarfallTween2 = TweenService:Create(Starfall,ButtonTweenInfo, {TextTransparency = 1})

local HearingTween1 = TweenService:Create(Hearing,ButtonTweenInfo, {ImageTransparency = 0})
local HearingTween2 = TweenService:Create(Hearing,ButtonTweenInfo, {ImageTransparency = 1})

local SensitiveTween1 = TweenService:Create(Sensitive,ButtonTweenInfo, {TextTransparency = 0})
local SensitiveTween2 = TweenService:Create(Sensitive,ButtonTweenInfo, {TextTransparency = 1})

local ContenttTween1 = TweenService:Create(Contentt,ButtonTweenInfo, {TextTransparency = 0})
local ContenttTween2 = TweenService:Create(Contentt,ButtonTweenInfo, {TextTransparency = 1})

local PatternTween1 = TweenService:Create(Pattern,ButtonTweenInfo, {ImageTransparency = 0.9})
local PatternTween2 = TweenService:Create(Pattern,ButtonTweenInfo, {ImageTransparency = 1})

local DetailsTween1 = TweenService:Create(Details,ButtonTweenInfo, {ImageTransparency = 0.7})
local DetailsTween2 = TweenService:Create(Details,ButtonTweenInfo, {ImageTransparency = 1})

local UpperFrameTween = TweenService:Create(UpperFrame,ButtonTweenInfo2, {Position = UDim2.new(0, 21 ,0, 76)})
local SingleplayerTween = TweenService:Create(Singleplayer,ButtonTweenInfo2, {Position = UDim2.new(0, 21, 0, 136)})
local MultiplayerTween = TweenService:Create(Multiplayer,ButtonTweenInfo2, {Position = UDim2.new(0, 420, 0, 136)})
local CreditsTween = TweenService:Create(Credits,ButtonTweenInfo2, {Position = UDim2.new(0, 21, 0, 372)})
local RewardsTween = TweenService:Create(Rewards,ButtonTweenInfo2, {Position = UDim2.new(0, 420, 0, 372)})

local UpperFrameTween2 = TweenService:Create(UpperFrame,ButtonTweenInfo2, {Position = UDim2.new(2, 21 ,0, 76)})
local SingleplayerTween2 = TweenService:Create(Singleplayer,ButtonTweenInfo2, {Position = UDim2.new(2, 21, 0, 136)})
local MultiplayerTween2 = TweenService:Create(Multiplayer,ButtonTweenInfo2, {Position = UDim2.new(2, 420, 0, 136)})
local CreditsTween2 = TweenService:Create(Credits,ButtonTweenInfo2, {Position = UDim2.new(2, 21, 0, 372)})
local RewardsTween2 = TweenService:Create(Rewards,ButtonTweenInfo2, {Position = UDim2.new(2, 420, 0, 372)})



function PlayerAdded(plr)
	PurpleFrame.Visible = true
	Pattern.Visible = true
	Details.Visible = true
	Starfall.Visible = true
	Logo.Visible = true
	
	wait(5)
	Song:Play()
	LoadingBarTween1:Play()
	BarTween1:Play()
	wait(9)
	LogoTween2:Play()
	StarfallTween2:Play()
	LoadingBarTween2:Play()
	BarTween2:Play()
	wait(0.5)
	HearingTween1:Play()
	SensitiveTween1:Play()
	ContenttTween1:Play()
	wait(3)
	HearingTween2:Play()
	SensitiveTween2:Play()
	ContenttTween2:Play()
	PatternTween2:Play()
	DetailsTween2:Play()
	wait(0.5)
	PurpleFrameTween1:Play()
	wait(1)
	UpperFrameTween:Play()
	SingleplayerTween:Play()
	MultiplayerTween:Play()
	RewardsTween:Play()
	CreditsTween:Play()
end

Singleplayer.MouseButton1Up:Connect(function()
	PurpleFrameTween2:Play()
	UpperFrameTween2:Play()
	SingleplayerTween2:Play()
	MultiplayerTween2:Play()
	RewardsTween2:Play()
	CreditsTween2:Play()
	wait(0.5)
	LogoTween1:Play()
	StarfallTween1:Play()
	PatternTween1:Play()
	DetailsTween1:Play()	
end)



game.Players.PlayerAdded:Connect(PlayerAdded)
for i,v in next,game.Players:GetPlayers() do
	PlayerAdded(v)
end

you first need to understand how offset and scale works. you seem to be combining both randomly, that’s why it has different results on different screen resolutions .

scale is what you’d want to use here, since it’s a number from 0 to 1 that represents the % of the X or Y axis on the screen. that means it will scale equally on all screen resolutions. you should use scale for both the size and positions of these elements

2 Likes

Thank you, that’s the solution

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.