Stylowanie interfejsu to rozwiązanie Roblox dla arkuszy stylów, podobne do CSS, które pozwala deklarować i globalnie stosować nadpisy do właściwości instancji interfejsu.Wsparcie na poziomie silnika jest podstawą dla edytora stylów i rury przepływu tokenów od końca do końca.
Koncepcje
Style zasady (część z StyleSheet ) dotyczą każdej instancji, która spełnia definicję reguły Selector w celu dopasowania cech takich jak nazwa klasy, nazwa instancji i relacje hierarchiczne.Zobacz dokumentację Selector na szczegóły.
Style tokenów , zdefiniowane za pomocą atrybutów tokena StyleSheet , reprezentują zmienne właściwości interfejsu, które można używać w stylach i komponentach, na przykład wspólny kolor dla Frame.BackgroundColor3 , TextLabel.TextColor3 i UIStroke.Color .Żetony są porównywalne z zmiennymi CSS .
Styl motywów , skonfigurowany za pomocą atrybutów motywu , składa się z zestawów konkretnych tokenów, które można wymienić, na przykład kolorowe tokeny definiujące temat "światła" i "ciemności".Powiązane tematy muszą mieć taki sam zestaw tokenów, aby poprawnie działać.

Propagacja zasady
Instancja StyleLink łączy StyleSheet i jej związane z nią zasady z rodzicem ScreenGui i całym GuiObjects w nim.Tylko jeden StyleSheet może odnieść się do danego drzewa.

Definicje selektora
Na wysokim poziomie dopasowanie i modyfikacja instancji za pomocą definicji Selector reguły działa poprzez:
- Selektory klasy Roblox które celują we wszystkie instancje określonej klasy, na przykład , , , itp.
- Tagi instancji zostały zastosowane do konkretnych obiektów UI za pośrednictwem .
- Wybór instancji nazwy zgodnie z wartością obiektu UI .
- Instancja modyfikatory , podobne do CSS pseudo-elementów , zastosowane za pomocą fantomu UIComponents takich jak UICorner lub UIStroke .
- GuiObject stan selektory, podobne do CSS pseudo-klasy selektorów, które odpowiadają jednej z czterech GuiState wartości enumeracyjnych, takich jak Hover .
Następująca konfiguracja pokazuje, jak żetki rozmiaru i koloru, motyw i selektor klasy "Frame" wytwarzają magentowy Frame o rozmiarze 200×200 pikseli.

Selektor klasy UI
local CollectionService = game:GetService("CollectionService")local ReplicatedStorage = game:GetService("ReplicatedStorage")local screenGui = script.Parent-- Żetonylocal tokens = Instance.new("StyleSheet")tokens.Name = "Tokens"tokens.Parent = ReplicatedStoragetokens:SetAttribute("SquareS", UDim2.fromOffset(50, 50))tokens:SetAttribute("SquareM", UDim2.fromOffset(100, 100))tokens:SetAttribute("SquareL", UDim2.fromOffset(200, 200))tokens:SetAttribute("Fit", UDim2.fromScale(1, 1))tokens:SetAttribute("Magenta", Color3.fromHex("FF0099"))tokens:SetAttribute("Gold", Color3.fromHex("FFCC00"))tokens:SetAttribute("Aqua", Color3.fromHex("0093F0"))-- MotywAlocal themeA = Instance.new("StyleSheet")themeA.Name = "ThemeA"themeA.Parent = ReplicatedStoragelocal tokensDerive = Instance.new("StyleDerive")tokensDerive.StyleSheet = tokens -- Derwuj globalne tokenytokensDerive.Parent = themeAthemeA:SetAttribute("FrameSize", "$SquareM")themeA:SetAttribute("FrameColor", "$Aqua")-- MotywBlocal themeB = Instance.new("StyleSheet")themeB.Name = "ThemeB"themeB.Parent = ReplicatedStoragelocal tokensDerive = Instance.new("StyleDerive")tokensDerive.StyleSheet = tokens -- Derwuj globalne tokenytokensDerive.Parent = themeBthemeB:SetAttribute("FrameSize", "$SquareL")themeB:SetAttribute("FrameColor", "$Magenta")-- Tabela projektowalocal designSheet = Instance.new("StyleSheet")designSheet.Name = "DesignSheet"designSheet.Parent = ReplicatedStoragelocal themeDerive = Instance.new("StyleDerive")themeDerive.StyleSheet = themeB -- Wywodź z ThemeBthemeDerive.Parent = designSheet-- Połącz arkusz projektu linków z ScreenGuilocal styleLink = Instance.new("StyleLink")styleLink.StyleSheet = designSheetstyleLink.Parent = screenGui-- Konfiguruj zasadęlocal rule = Instance.new("StyleRule")rule.Selector = "Frame" -- Selektor klasyrule.Parent = designSheet-- Ustaw właściwości zasadyrule:SetProperties({["BackgroundColor3"] = "$FrameColor",["Size"] = "$FrameSize",["BorderSizePixel"] = 0})local frame = Instance.new("Frame")frame.Parent = screenGui
Modyfikowane właściwości
Właściwości instancji dotknięte stylizacją są oznaczane znacznikiem ⚠ w oknie Właściwości , a przewijanie właściwości dotkniętej stylizacją pokazuje, jaki styl ją wpływa.Na przykład, jeśli zasada stylu mówi do oznaczonych Frame użyć AnchorPoint z 0.5, 0.5 , właściwość obiektu pokaże domyślną wartość **** z 0, 0 ale jej rzeczywista wartość AnchorPoint będzie używać wartości zasady stylizowanej .

Gdy domyślna lub stylizowana wartość właściwości zostanie dalej zmodyfikowana dla określonego obiektu interfejsu użytkownika, staje się pogrubiona w celu wskazania zmienionej wartości.Na przykład — załóżmy domyślną wartość AnchorPoint0, 0 — ustawienie tej właściwości na 1, 1 dla konkretnej instancji ujawnia przejęcie w pogrubieniu:


Dla każdej zmienionej wartości właściwości możesz ją prawym przyciskiem kliknąć w oknie Właściwości i wybrać Zresetuj do domyślnej wartości , aby przywrócić ją do stylowanej wartości lub do domyślnej wartości właściwości, jeśli nie została stylizowana.