一個 文字框 允許玩家提供文字輸入。它與 TextButton 相同,除了單個文字框可以通過點擊、點擊或遊戲手柄選擇放置在焦點外。在焦點中,玩家可以使用鍵盤來變更 Text 屬性。
- 如果沒有文字,PlaceholderText 將會顯示。這是一種提示玩家輸入資料的種類或格式的好方法。
- 預設值下,ClearTextOnFocus 屬性啟用,確保沒有任何文字在 TextBox 專注時存在。這可能不是玩家所編輯的文字。
- Class.Toolbar.MultiLine|MultiLine 屬性允許玩家輸入多個行文本,並且使用新行標角色( \n )來輸入新行。
Class.ContextActionService 榮譽 ContextActionService:BindAction() 的文字輸入鍵綁,並且會自動防止按鍵綁定的鍵綁事件傳送至 UserInputService.InputBegan 。 1>Class.UserInputService.InputBegan1> 和相關事件將在 TextBox 專注時發生。
專注狀態
可以偵測並變更文字框的焦點狀態:
- 當對話框出現時,您可以使用 CaptureFocus 來讓玩家不用點擊 TextBox 當它變成可用時;您可以使用 ContextActionService:BindAction() 來將特定鍵綁定到使用此功能的 TextBox ;當 TextBox 來焦點時, Class.ContextAction
- 您可以使用 IsFocused 來檢查是否有某個 TextBox 在焦點上。或者, UserInputService:GetFocusedTextBox() 可以用來檢查任何 TextBox 是否在焦點上。
- 如果遊玩中發生了一些更重要的事件,你可以 ReleaseFocus 的 TextBox 以便玩家的鍵盤輸入可以返回你的遊戲。
文字編輯
一個 TextBox 支援文字選擇通過其 CursorPosition 和 SelectionStart 屬性來選擇文字。使用 GetPropertyChangedSignal ,您可以偵測當選擇變更時發生。此外,您可以在 TextBox 中複製並貼入文
文字篩選通知 使用文字即可啟用玩家間通訊的遊戲,例如自訂聊天或名稱標籤,必須正確使用 TextService:FilterStringAsync() 或 Chat:FilterStringAsync() 來過濾此文字。 如果未能正確過濾,您的遊戲可能會受到審核動作。
範例程式碼
-- Place this code in a LocalScript inside a TextBox
local textBox = script.Parent
local secretWord = "roblox"
local colorNormal = Color3.new(1, 1, 1) -- white
local colorWrong = Color3.new(1, 0, 0) -- red
local colorCorrect = Color3.new(0, 1, 0) -- green
-- Initialize the state of the textBox
textBox.ClearTextOnFocus = true
textBox.Text = ""
textBox.Font = Enum.Font.Code
textBox.PlaceholderText = "What is the secret word?"
textBox.BackgroundColor3 = colorNormal
local function onFocused()
textBox.BackgroundColor3 = colorNormal
end
local function onFocusLost(enterPressed, _inputObject)
if enterPressed then
local guess = textBox.Text
if guess == secretWord then
textBox.Text = "ACCESS GRANTED"
textBox.BackgroundColor3 = colorCorrect
else
textBox.Text = "ACCESS DENIED"
textBox.BackgroundColor3 = colorWrong
end
else
-- The player stopped editing without pressing Enter
textBox.Text = ""
textBox.BackgroundColor3 = colorNormal
end
end
textBox.FocusLost:Connect(onFocusLost)
textBox.Focused:Connect(onFocused)
概要
屬性
決定是否單擊文字框會清除其 TextBox.Text 屬性。
決定文字指针的位移量,或 -1 如果沒有位移器。
決定要使用的字體。
決定要使用的字體。
在 TextBox 中減少文字之間的空格。
Class.Toolbar 可以顯示的最大圖形數量。
設定為"真"時,文字內的文字框能夠移動至多個行。這也讓玩家可以使用" Enter "鍵來移動至新行。
設定沒有輸入任何文字到 TextBox 時使用的文字顏色。
設定沒有輸入任何文字到 TextBox 時顯示的文字。
決定是否要使用強力的文字格式將 TextBox.Text 字串顯示。
確定文字選擇的起始位置,或-1如果沒有文字選擇。
如果設為真,輸入原生到平台是使用 Roblox 的預設鍵盤而不是 Roblox 的預設鍵盤。
決定 UI 元素所 rend染的字串。
在偏移數中介面元素的文字大小。
決定顯示文字的顏色。
決定使用者是否可以變更 Text 。
文字是否能夠符合 TextBox 的限制。
變更文字是否會改變以便適合它的圖形用戶界面對象。
在偏移量中決定文字的行高。
確定文字擊畫的顏色。
決定文字筆記的透明度。
決定渲染文字的透明度。
控制此文字盒中顯示的文字的切換。
確定要在 GUI 元素空間內將文字包裹在多個行內嗎,否則會捨棄多餘的文字。
決定渲染文字的水平對稱。
決定渲染文字的垂直齕列。
決定這個輸入是否會沉沒在此 UI 元素。
對 GuiObject 的起始點,相對於其絕對大小。
決定是否會在基於兒童內容的重新縮放。
決定 GuiObject 背景顏色。
決定 GuiObject 背景和邊框的透明度。
決定 GuiObject 邊框的顏色。
決定GuiObject邊框的大小與邊框相對位置。
決定 GuiObject 邊框的像素寬度。
決定是否在超級父元素 GUI 元素外會成像子元素 GuiObjects。
決定玩家的滑鼠是否正在按在 GuiObject 上或不是。
決定 GuiButton 是否可以與或不與互動,或是否要檢查 GuiState 的 GuiObject 是否正在變更或不變更。
使用 GuiObject 時,控制 UIGridStyleLayout 的排序順序。
設定 GuiObject 將在遊戲控制器選擇器向下移動時選擇。
設定 GuiObject ,當遊戲控制器選擇器移動到左邊時會選擇。
設置 GuiObject 將在遊戲控制器選擇器移動到右邊時選擇。
設定 GuiObject 將在遊戲控制器選手柄上移動時選擇。
決定 GuiObject 的像素和矢量位置。
確定 GuiObject 旋轉的程度。
確認遊戲控制器可以選擇 GUI 嗎。
覆蓋遊戲手柄的預設裝飾。
遊戲控制器選擇 GuiObjects 的程序順序。
決定 GuiObject 的像素和浮點大小。
Class.GuiObject.BackgroundTransparency|BackgroundTransparency 和 TextTransparency 的混合屬性。
決定是否要渲染 GuiObject 和它的子孫。
決定 GuiObject 與其他人相對的排名。
描述介面元素的實際屏幕位置,以幣晃。
描述 UI 元素的實際螢幕旋轉度。
描述 UI 元素的實際屏幕尺寸,以幣晃。
設為真的時,本地化將適用於此 GuiBase2d 和它的後代。
一個引用 LocalizationTable 以應用自動本地化到這個 GuiBase2d 和它的後代。
在下向方向中自訂遊戲控制器選擇行為。
在左向方向中自訂遊戲控制器選擇行為。
自訂遊戲控制器選擇行為。
在上方向中自訂遊戲控制器選擇行為。
允許自訂遊戲控制器選擇動作。
方法
強制客戶端專注於 TextBox。
如果輸入框是專注的,則返回 true ;如果不是,則返回 false。
強制客戶端把 TextBox 的焦點移除。
- TweenPosition(endPosition : UDim2,easingDirection : Enum.EasingDirection,easingStyle : Enum.EasingStyle,time : number,override : bool,callback : function):bool
順滑地將一個 GUI 移至新的 UDim2 。
- TweenSize(endSize : UDim2,easingDirection : Enum.EasingDirection,easingStyle : Enum.EasingStyle,time : number,override : bool,callback : function):bool
順滑地將 GUI 重新調整為新的 UDim2。
- TweenSizeAndPosition(endSize : UDim2,endPosition : UDim2,easingDirection : Enum.EasingDirection,easingStyle : Enum.EasingStyle,time : number,override : bool,callback : function):bool
順滑地將一個 GUI 移動到新的尺寸和位置。
活動
活動 繼承自 GuiObject發生時間發生時,使用者開始使用人機交互裝置 (滑鼠按鈕, 觸摸開始, 鍵盤按鈕等等)。
使用者改變人機交互裝置 (滑鼠按鈕、觸摸開始、鍵盤按鈕等) 時發生時間。
發生時間當使用者停止使用人類電腦介面裝置 (滑鼠按鈕關閉, 觸摸開始, 鍵盤按鈕下等) 時。
使用者移動滑鼠到 GUI 元素時會發生火焰。
發射一個使用者從 GUI 元素移動滑鼠時。
在使用者移動鼠標時,發射 GUI 元素內的任何時間。
發射時,使用者將鼠標輪向返回,當滑鼠位於一個 GUI 元素上。
發射時,使用者將鼠標輪向前移動,當滑鼠位於 GUI 元素上。
發射時 GuiObject 與遊戲控制器選擇器專注。
發射時Gamepad選擇器停止專注在GUI對象上。
玩家開始時、繼續和停止按長按 UI 元素。
- TouchPan(touchPositions : Array,totalTranslation : Vector2,velocity : Vector2,state : Enum.UserInputState):RBXScriptSignal
玩家移動指針時發射。
- TouchPinch(touchPositions : Array,scale : number,velocity : number,state : Enum.UserInputState):RBXScriptSignal
發射時玩家使用兩個手指在 UI 元素上執行點擊或拉動動作時。
- TouchRotate(touchPositions : Array,rotation : number,velocity : number,state : Enum.UserInputState):RBXScriptSignal
發生時玩家使用兩個手指在 UI 元素上執行旋轉動作時。
發射玩家在介面元素上執行擺動手勢時。
發射玩家在介面元素上執行點擊動作時。
- SelectionChanged(amISelected : bool,previousSelection : GuiObject,newSelection : GuiObject):RBXScriptSignal
發射在遊戲控制器選擇移動到,離開,或變更連接的 GuiBase2d 或任何子選項 GuiObjects。
屬性
ContentText
CursorPosition
CursorPosition 決定了文字指针在字節上的偏移,或 -1 如果 TextBox 目前沒有編輯。一個值的 1 代表開始位置,位於第一個字節前的位置。當與 Text 屬性結合時,可以以兩個方式獲得和設置文字在文字框
請注意,這個屬性的單位是 位元 ,而且很多的矮號字符,例如表情符號,都是 超過 1 位 。例個體、實例,如果玩家在 TextBox 中輸入「Hello👋」 – 「Hello」即刻跟隨手勢標誌 – 曲標位置將會是 10,而不是 7,因為矮號使用 4 位
範例程式碼
local textBox = script.Parent
local function showSelection()
if textBox.CursorPosition == -1 or textBox.SelectionStart == -1 then
print("No selection")
else
local selectedText = string.sub(
textBox.Text,
math.min(textBox.CursorPosition, textBox.SelectionStart),
math.max(textBox.CursorPosition, textBox.SelectionStart)
)
print('The selection is:"', selectedText, '"')
end
end
textBox:GetPropertyChangedSignal("CursorPosition"):Connect(showSelection)
textBox:GetPropertyChangedSignal("SelectionStart"):Connect(showSelection)
Font
字體屬性選擇幾個預設 fonts 與UI元素會渲染其文字的字體。一些字體有強烈的、標籤和/或淺色變體 (因為沒有字體重量或字體風格屬性).
除了 "Legacy" 字體之外,每個字體都會以 TextBox.TextSize 屬性的線距等於。 "Code" 字體是唯一的單行距字體。它有每個角色都有完全相同的寬度和高度比率的 1:2 。每個角色的寬度大約是 TextBox.TextSize 屬性的一半。
此屬性與 TextBox.FontFace 屬性保持同步。設置字體時,字體將設置為 Font.fromEnum(value)。
範例程式碼
local textLabel = script.Parent
while true do
-- Iterate over all the different fonts
for _, font in pairs(Enum.Font:GetEnumItems()) do
textLabel.Font = font
textLabel.Text = font.Name
task.wait(1)
end
end
local frame = script.Parent
-- Create a TextLabel displaying each font
for _, font in pairs(Enum.Font:GetEnumItems()) do
local textLabel = Instance.new("TextLabel")
textLabel.Name = font.Name
-- Set the text properties
textLabel.Text = font.Name
textLabel.Font = font
-- Some rendering properties
textLabel.TextSize = 24
textLabel.TextXAlignment = Enum.TextXAlignment.Left
-- Size the frame equal to the height of the text
textLabel.Size = UDim2.new(1, 0, 0, textLabel.TextSize)
-- Add to the parent frame
textLabel.Parent = frame
end
-- Layout the frames in a list (if they aren't already)
if not frame:FindFirstChildOfClass("UIListLayout") then
local uiListLayout = Instance.new("UIListLayout")
uiListLayout.Parent = frame
end
FontFace
FontFace 屬性與字體屬性相似,但可以設定不存在於字體枚表中的字體。
此屬性與 TextBox.Font 屬性保持同步。設置字體時,字體將設置到相應的枚列值,或者在 Enum.Font.Unknown 如果沒有匹配。
MaxVisibleGraphemes
這個屬性控制 TextBox 上顯示的最大圖形 (或文字單位) 數量,無論是顯示 TextBox.PlaceholderText 或 TextBox.Text 。
變更屬性不會改變可見的圖形的位置或大小 - 結構將以可見的所有圖形為準確度計算。
將屬性設為 -1 會禁用限制,並且顯示整個 TextBox.Text 。
OpenTypeFeatures
OpenTypeFeaturesError
RichText
此屬性決定 TextBox 是否使用強力文字格式渲染 TextBox.Text 字串。 Class.Toolbar.Text 使用簡單的標記標籤來格式化字串的標籤。
要使用豐富的文字,您只需要在 TextBox.Text 字串中包含格式標籤。
注意,當 TextBox 有此屬性啟用,且盒子獲得專注時,用戶將能夠編輯並與完整的XML字串交互,包括所有的格式標籤。當專注失去時,文字將自動解析並渲染標籤為重文字。
SelectionStart
確定文字選擇的起始位置,或者 -1 如果 TextBox 沒有選擇範圍。如果值是 -1 或相當於 CursorPosition ,沒有選擇範圍。此屬性使用相同的位置論理,如 CursorPosition。選擇開始會比 CursorPosition 大,如果曲線器位置在選擇開結束的開始,或者
範例程式碼
local textBox = script.Parent
local function showSelection()
if textBox.CursorPosition == -1 or textBox.SelectionStart == -1 then
print("No selection")
else
local selectedText = string.sub(
textBox.Text,
math.min(textBox.CursorPosition, textBox.SelectionStart),
math.max(textBox.CursorPosition, textBox.SelectionStart)
)
print('The selection is:"', selectedText, '"')
end
end
textBox:GetPropertyChangedSignal("CursorPosition"):Connect(showSelection)
textBox:GetPropertyChangedSignal("SelectionStart"):Connect(showSelection)
Text
文字屬性決定內容由UI元素渲染。視覺屬性由 TextBox.TextColor3 、 TextBox.TextTransparency 、
您可以渲染表情符號 (例如,😃) 和其他符號。這些特殊符號不受 TextBox.TextColor3 屬性的影響。這些內容可以被貼在 Script 和 LocalScript 對象,以及在屬性窗口中的字段。
此屬性可能包含新行字符,但它不是可以在屬性窗口中輸入新行字符。同樣,此屬性可能包含Tab字符,但它會以空格代理輸入。
範例程式碼
local TweenService = game:GetService("TweenService")
local textLabel = script.Parent
local content = {
"Welcome to my game!",
"Be sure to have fun!",
"Please give suggestions!",
"Be nice to other players!",
"Don't grief other players!",
"Check out the shop!",
"Tip: Don't die!",
}
local tweenInfo = TweenInfo.new(1, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut)
local RNG = Random.new()
local fadeIn = TweenService:Create(textLabel, tweenInfo, {
TextTransparency = 0,
})
local fadeOut = TweenService:Create(textLabel, tweenInfo, {
TextTransparency = 1,
})
local lastIndex
while true do
-- Step 0: Fade out before doing anything
fadeOut:Play()
task.wait(tweenInfo.Time)
-- Step 1: pick content that wasn't the last displayed
local index
repeat
index = RNG:NextInteger(1, #content)
until lastIndex ~= index
-- Make sure we don't show the same thing next time
lastIndex = index
-- Step 2: show the content
textLabel.Text = content[index]
fadeIn:Play()
task.wait(tweenInfo.Time + 1)
end
local textLabel = script.Parent
textLabel.Text = "Kaboom!"
while true do
for size = 5, 100, 5 do
textLabel.TextSize = size
textLabel.TextTransparency = size / 100
task.wait()
end
task.wait(1)
end
local frame = script.Parent
-- Create a TextLabel displaying each font
for _, font in pairs(Enum.Font:GetEnumItems()) do
local textLabel = Instance.new("TextLabel")
textLabel.Name = font.Name
-- Set the text properties
textLabel.Text = font.Name
textLabel.Font = font
-- Some rendering properties
textLabel.TextSize = 24
textLabel.TextXAlignment = Enum.TextXAlignment.Left
-- Size the frame equal to the height of the text
textLabel.Size = UDim2.new(1, 0, 0, textLabel.TextSize)
-- Add to the parent frame
textLabel.Parent = frame
end
-- Layout the frames in a list (if they aren't already)
if not frame:FindFirstChildOfClass("UIListLayout") then
local uiListLayout = Instance.new("UIListLayout")
uiListLayout.Parent = frame
end
local textLabel = script.Parent
-- This text wrapping demo is best shown on a 200x50 px rectangle
textLabel.Size = UDim2.new(0, 200, 0, 50)
-- Some content to spell out
local content = "Here's a long string of words that will "
.. "eventually exceed the UI element's width "
.. "and form line breaks. Useful for paragraphs "
.. "that are really long."
-- A function that will spell text out two characters at a time
local function spellTheText()
-- Iterate from 1 to the length of our content
for i = 1, content:len() do
-- Get a substring of our content: 1 to i
textLabel.Text = content:sub(1, i)
-- Color the text if it doesn't fit in our box
if textLabel.TextFits then
textLabel.TextColor3 = Color3.new(0, 0, 0) -- Black
else
textLabel.TextColor3 = Color3.new(1, 0, 0) -- Red
end
-- Wait a brief moment on even lengths
if i % 2 == 0 then
task.wait()
end
end
end
while true do
-- Spell the text with scale/wrap off
textLabel.TextWrapped = false
textLabel.TextScaled = false
spellTheText()
task.wait(1)
-- Spell the text with wrap on
textLabel.TextWrapped = true
textLabel.TextScaled = false
spellTheText()
task.wait(1)
-- Spell the text with text scaling on
-- Note: Text turns red (TextFits = false) once text has to be
-- scaled down in order to fit within the UI element.
textLabel.TextScaled = true
-- Note: TextWrapped is enabled implicitly when TextScaled = true
--textLabel.TextWrapped = true
spellTheText()
task.wait(1)
end
local textLabel = script.Parent
local moods = {
["happy"] = "😃",
["sad"] = "😢",
["neutral"] = "😐",
["tired"] = "😫",
}
while true do
for mood, face in pairs(moods) do
textLabel.Text = "I am feeling " .. mood .. "! " .. face
task.wait(1)
end
end
TextBounds
只讀取的屬性 TextBounds 反射畫面上的文字大小。 用其他話來說,如果您嘗試將文字寫進矩形,這個屬性將反射您需要才能寫入文字的最小尺寸。
使用 TextService:GetTextSize() ,您可以預測文字框將在指定的文字標字串上, TextBox.Font , TextBox.TextSize 和框架尺寸。
範例程式碼
local textBox = script.Parent
-- The smallest the TextBox will go
local minWidth, minHeight = 10, 10
-- Set alignment so our text doesn't wobble a bit while we type
textBox.TextXAlignment = Enum.TextXAlignment.Left
textBox.TextYAlignment = Enum.TextYAlignment.Top
local function updateSize()
textBox.Size = UDim2.new(0, math.max(minWidth, textBox.TextBounds.X), 0, math.max(minHeight, textBox.TextBounds.Y))
end
textBox:GetPropertyChangedSignal("TextBounds"):Connect(updateSize)
TextColor3
這個屬性將所有由 GUI 元素所渲染的文字的顏色決定。這個屬性以及 TextBox.Font、TextBox.TextSize 和 1> Class.Toolbar.TextTransparency1> 會決定文字的視����
重要的是,文字一定要讓玩家容易讀取!請確保選擇滋飽度小於或等於 TextBox.BackgroundColor3 的顏色,例如白色、灰色或黑色。請確保文字的顏色與介面元素的 TextBox.TextStrokeColor3 對應。如果元素有透明背景,請應用黑
範例程式碼
local textBox = script.Parent
local function hasVowels(str)
return str:lower():find("[aeiou]")
end
local function onTextChanged()
local text = textBox.Text
-- Check for vowels
if hasVowels(text) then
textBox.TextColor3 = Color3.new(0, 0, 0) -- Black
else
textBox.TextColor3 = Color3.new(1, 0, 0) -- Red
end
end
textBox:GetPropertyChangedSignal("Text"):Connect(onTextChanged)
-- Place this code in a LocalScript inside a TextBox
local textBox = script.Parent
local secretWord = "roblox"
local colorNormal = Color3.new(1, 1, 1) -- white
local colorWrong = Color3.new(1, 0, 0) -- red
local colorCorrect = Color3.new(0, 1, 0) -- green
-- Initialize the state of the textBox
textBox.ClearTextOnFocus = true
textBox.Text = ""
textBox.Font = Enum.Font.Code
textBox.PlaceholderText = "What is the secret word?"
textBox.BackgroundColor3 = colorNormal
local function onFocused()
textBox.BackgroundColor3 = colorNormal
end
local function onFocusLost(enterPressed, _inputObject)
if enterPressed then
local guess = textBox.Text
if guess == secretWord then
textBox.Text = "ACCESS GRANTED"
textBox.BackgroundColor3 = colorCorrect
else
textBox.Text = "ACCESS DENIED"
textBox.BackgroundColor3 = colorWrong
end
else
-- The player stopped editing without pressing Enter
textBox.Text = ""
textBox.BackgroundColor3 = colorNormal
end
end
textBox.FocusLost:Connect(onFocusLost)
textBox.Focused:Connect(onFocused)
-- Place this code in a LocalScript within a TextLabel/TextButton
local textLabel = script.Parent
-- Some colors we'll use with TextColor3
local colorNormal = Color3.new(0, 0, 0) -- black
local colorSoon = Color3.new(1, 0.5, 0.5) -- red
local colorDone = Color3.new(0.5, 1, 0.5) -- green
-- Loop infinitely
while true do
-- Count backwards from 10 to 1
for i = 10, 1, -1 do
-- Set the text
textLabel.Text = "Time: " .. i
-- Set the color based on how much time is left
if i > 3 then
textLabel.TextColor3 = colorNormal
else
textLabel.TextColor3 = colorSoon
end
task.wait(1)
end
textLabel.Text = "GO!"
textLabel.TextColor3 = colorDone
task.wait(2)
end
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Place a StringValue called "GameState" in the ReplicatedStorage
local vGameState = ReplicatedStorage:WaitForChild("GameState")
-- Place this code in a TextLabel
local textLabel = script.Parent
-- Some colors we'll use with TextColor3
local colorNormal = Color3.new(0, 0, 0) -- black
local colorCountdown = Color3.new(1, 0.5, 0) -- orange
local colorRound = Color3.new(0.25, 0.25, 1) -- blue
-- We'll run this function to update the TextLabel as the state of the
-- game changes.
local function update()
-- Update the text
textLabel.Text = "State: " .. vGameState.Value
-- Set the color of the text based on the current game state
if vGameState.Value == "Countdown" then
textLabel.TextColor3 = colorCountdown
elseif vGameState.Value == "Round" then
textLabel.TextColor3 = colorRound
else
textLabel.TextColor3 = colorNormal
end
end
-- Pattern: update once when we start and also when vGameState changes
-- We should always see the most updated GameState.
update()
vGameState.Changed:Connect(update)
TextDirection
TextEditable
TextEditable 決定使用者可以通過輸入 Text 來變更。 建議您關閉 ClearTextOnFocus ,以便在此屬性被禁用時,文字仍可在遊戲中清除。 此屬性對於複製在遊戲中的閱讀
TextScaled
而不是使用 TextScaled,我們建議您考慮使用 AutomaticSize ,這是一種新的方法來動態尺寸用戶界面,以獲得最佳視覺效果。
TextScaled 屬性決定是否要將文字縮放,以填滿整個 UI 元素的空間。 當此屬性啟用時, TextBox.TextSize 會被忽略, TextBox.TextWrapped 將自動啟用。 此屬性對於文字-渲染 UI 元素內的 BillboardGuis 很有用。
當此屬性用於屏幕空間 UI 時,可能會有需要使用 UITextSizeConstraint 來限制可能的文字大小範圍。
文字大小和自動大小
建議開發人員避免使用 TextScaled 並調整 UI 以取得自動大小屬性的優勢。 這裡是兩個屬性之間的核心差別:
- TextScaled 將內容 (text) 調整為容納 UI 的大小。 若不小心,一些文字可能會因為縮放而變得難以讀取。
- 自動大小會將內容調整為 UI 。
使用自動大小即可調整您的 UI 來容納內容 (文字) ,並且保持一致的字體大小。有關自動大小的更多資訊,請參閱「UI 自動大小」文章。
我們建議您不要在同一個 UI 對物件上應用兩種文字大小和自動大小。如果您應用兩種屬性:
- 自動大小將可用空間的最大值決定 (在此案例中,文字)
- TextScaled 使用自動大小確定的可用空間來調整字體大小,以符合可用空間,這會在最大字體大小 (100) 如果沒有尺寸限制
- 結果將是:文字將以 100 字體大小顯示,並且介面對象將會擴展以容納這些文字
使用自動大小和文字大小兩個自動減少器,可能會在自動大小關閉時發生較大的縮放差異。
範例程式碼
local textLabel = script.Parent
-- This text wrapping demo is best shown on a 200x50 px rectangle
textLabel.Size = UDim2.new(0, 200, 0, 50)
-- Some content to spell out
local content = "Here's a long string of words that will "
.. "eventually exceed the UI element's width "
.. "and form line breaks. Useful for paragraphs "
.. "that are really long."
-- A function that will spell text out two characters at a time
local function spellTheText()
-- Iterate from 1 to the length of our content
for i = 1, content:len() do
-- Get a substring of our content: 1 to i
textLabel.Text = content:sub(1, i)
-- Color the text if it doesn't fit in our box
if textLabel.TextFits then
textLabel.TextColor3 = Color3.new(0, 0, 0) -- Black
else
textLabel.TextColor3 = Color3.new(1, 0, 0) -- Red
end
-- Wait a brief moment on even lengths
if i % 2 == 0 then
task.wait()
end
end
end
while true do
-- Spell the text with scale/wrap off
textLabel.TextWrapped = false
textLabel.TextScaled = false
spellTheText()
task.wait(1)
-- Spell the text with wrap on
textLabel.TextWrapped = true
textLabel.TextScaled = false
spellTheText()
task.wait(1)
-- Spell the text with text scaling on
-- Note: Text turns red (TextFits = false) once text has to be
-- scaled down in order to fit within the UI element.
textLabel.TextScaled = true
-- Note: TextWrapped is enabled implicitly when TextScaled = true
--textLabel.TextWrapped = true
spellTheText()
task.wait(1)
end
TextSize
TextSize 屬性決定一條渲染文字的高度。單位是在偏移量中,不是點 (在大多數文件編輯程式中使用)。「傳承」字體不持有此屬性。
範例程式碼
local textLabel = script.Parent
textLabel.Text = "Kaboom!"
while true do
for size = 5, 100, 5 do
textLabel.TextSize = size
textLabel.TextTransparency = size / 100
task.wait()
end
task.wait(1)
end
TextStrokeColor3
TextStrokeColor3 屬性設定文本渲染時的輪廓或輪廓顏色。這個屬性和 TextBox.TextStrokeTransparency 決定文本輪廓的視覺屬性。
文字擊殺是在正常文字和前往 1 個方向的 4 個重新渲染之前渲染的,文字擊殺的渲染方式是獨立的並且與 TextBox.TextColor3 和 TextBox.TextTransparency 相同。
範例程式碼
local textLabel = script.Parent
-- How fast the highlight ought to blink
local freq = 2
-- Set to yellow highlight color
textLabel.TextStrokeColor3 = Color3.new(1, 1, 0)
while true do
-- math.sin oscillates from -1 to 1, so we change the range to 0 to 1:
local transparency = math.sin(workspace.DistributedGameTime * math.pi * freq) * 0.5 + 0.5
textLabel.TextStrokeTransparency = transparency
task.wait()
end
TextStrokeTransparency
TextStrokeTransparency 屬性設定結束時文字的層次透明度,或稱外部輪廓。這個屬性和 TextBox.TextStrokeColor3 決定文字外部輪廓的視覺屬性。
文字擊箭 是在正常文字和簡單的文字四個方向的 1 個或多個方向的前後處理。 文字擊
範例程式碼
local textLabel = script.Parent
-- How fast the highlight ought to blink
local freq = 2
-- Set to yellow highlight color
textLabel.TextStrokeColor3 = Color3.new(1, 1, 0)
while true do
-- math.sin oscillates from -1 to 1, so we change the range to 0 to 1:
local transparency = math.sin(workspace.DistributedGameTime * math.pi * freq) * 0.5 + 0.5
textLabel.TextStrokeTransparency = transparency
task.wait()
end
TextTransparency
TextColor3 屬性決定所有由 UI 元素渲染的文字的透明度。這個屬性以及 TextBox.Font 、 TextBox.TextSize 和 TextBox.TextColor3 會決定文字的視覺特性。文字會在文字擊押後 rend染 ( 1> Class.Toolbar.TextSt
使用數字 for- loop 來顯示屏幕上顯示的文字是一種絕妙的方法來吸引玩家的注意。
-- Count backwards from 1 to 0, decrementing by 0.1for i = 1, 0, -0.1 dotextLabel.TextTransparency = itask.wait(0.1)end
範例程式碼
local TweenService = game:GetService("TweenService")
local textLabel = script.Parent
local content = {
"Welcome to my game!",
"Be sure to have fun!",
"Please give suggestions!",
"Be nice to other players!",
"Don't grief other players!",
"Check out the shop!",
"Tip: Don't die!",
}
local tweenInfo = TweenInfo.new(1, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut)
local RNG = Random.new()
local fadeIn = TweenService:Create(textLabel, tweenInfo, {
TextTransparency = 0,
})
local fadeOut = TweenService:Create(textLabel, tweenInfo, {
TextTransparency = 1,
})
local lastIndex
while true do
-- Step 0: Fade out before doing anything
fadeOut:Play()
task.wait(tweenInfo.Time)
-- Step 1: pick content that wasn't the last displayed
local index
repeat
index = RNG:NextInteger(1, #content)
until lastIndex ~= index
-- Make sure we don't show the same thing next time
lastIndex = index
-- Step 2: show the content
textLabel.Text = content[index]
fadeIn:Play()
task.wait(tweenInfo.Time + 1)
end
local textLabel = script.Parent
textLabel.Text = "Kaboom!"
while true do
for size = 5, 100, 5 do
textLabel.TextSize = size
textLabel.TextTransparency = size / 100
task.wait()
end
task.wait(1)
end
TextWrapped
啟用時,這個屬性會在 GUI 元素的空間中渲染文字,讓 TextBox.TextBounds 永遠不會超過 GUI 元素的 GuiBase2d.AbsoluteSize。
這可以通過將長文字分為多個行來達到此目的。 行分頁會優先擁有空格;如果長文字沒有空格,文字會被分為多個行。
如果再次行間斷線將導致文字的垂直高度超過元素的垂直高度(TextBox.TextBounds 的 Y 元件),那條線將不會渲染,因為該條線不會在垂直高度上與元素相同。
範例程式碼
local textLabel = script.Parent
-- This text wrapping demo is best shown on a 200x50 px rectangle
textLabel.Size = UDim2.new(0, 200, 0, 50)
-- Some content to spell out
local content = "Here's a long string of words that will "
.. "eventually exceed the UI element's width "
.. "and form line breaks. Useful for paragraphs "
.. "that are really long."
-- A function that will spell text out two characters at a time
local function spellTheText()
-- Iterate from 1 to the length of our content
for i = 1, content:len() do
-- Get a substring of our content: 1 to i
textLabel.Text = content:sub(1, i)
-- Color the text if it doesn't fit in our box
if textLabel.TextFits then
textLabel.TextColor3 = Color3.new(0, 0, 0) -- Black
else
textLabel.TextColor3 = Color3.new(1, 0, 0) -- Red
end
-- Wait a brief moment on even lengths
if i % 2 == 0 then
task.wait()
end
end
end
while true do
-- Spell the text with scale/wrap off
textLabel.TextWrapped = false
textLabel.TextScaled = false
spellTheText()
task.wait(1)
-- Spell the text with wrap on
textLabel.TextWrapped = true
textLabel.TextScaled = false
spellTheText()
task.wait(1)
-- Spell the text with text scaling on
-- Note: Text turns red (TextFits = false) once text has to be
-- scaled down in order to fit within the UI element.
textLabel.TextScaled = true
-- Note: TextWrapped is enabled implicitly when TextScaled = true
--textLabel.TextWrapped = true
spellTheText()
task.wait(1)
end
TextXAlignment
TextXAlignment 決定了文本在 UI 元素的空間中的水平正렬 (X 軸) 。它與 CSS 文字對齊屬性相同,左,右和中心值 (沒有左邊/右邊文本範圍)。對於左和右,文本會在文本元素的左邊/右邊範圍內正確對稱。對於中心,每個文字行都會在文本元素的中心值上正確對稱
此屬性與 TextBox.TextYAlignment 一起使用,以完全確定在兩個軸上的文字對齊。此屬性不會影響 TextBox.TextBounds 和 TextBox.TextFits 的閱取屬性。
範例程式碼
-- Paste this in a LocalScript within a TextLabel/TextButton/TextBox
local textLabel = script.Parent
local function setAlignment(xAlign, yAlign)
textLabel.TextXAlignment = xAlign
textLabel.TextYAlignment = yAlign
textLabel.Text = xAlign.Name .. " + " .. yAlign.Name
end
while true do
-- Iterate over both TextXAlignment and TextYAlignment enum items
for _, yAlign in pairs(Enum.TextYAlignment:GetEnumItems()) do
for _, xAlign in pairs(Enum.TextXAlignment:GetEnumItems()) do
setAlignment(xAlign, yAlign)
task.wait(1)
end
end
end
TextYAlignment
文字對齡軸決定了文字在 UI 元素的空間中的垂直對齡。對於上方和下方,文字會以 Y 軸的形式呈現,兩個上方/下方的文字範圍分別擁有文字元素的邊緣。對於中間,文字會以 Y 軸的形式呈現,兩個上方/下方的文字範圍分別為兩個元素的�
此屬性與 TextBox.TextXAlignment 一起使用,以完全確定在兩個軸上的文字對齊。此屬性不會影響 TextBox.TextBounds 和 TextBox.TextFits 的閱取屬性。
範例程式碼
-- Paste this in a LocalScript within a TextLabel/TextButton/TextBox
local textLabel = script.Parent
local function setAlignment(xAlign, yAlign)
textLabel.TextXAlignment = xAlign
textLabel.TextYAlignment = yAlign
textLabel.Text = xAlign.Name .. " + " .. yAlign.Name
end
while true do
-- Iterate over both TextXAlignment and TextYAlignment enum items
for _, yAlign in pairs(Enum.TextYAlignment:GetEnumItems()) do
for _, xAlign in pairs(Enum.TextXAlignment:GetEnumItems()) do
setAlignment(xAlign, yAlign)
task.wait(1)
end
end
end
方法
CaptureFocus
強制客戶端專注於 TextBox。
返回
範例程式碼
local ContextActionService = game:GetService("ContextActionService")
local ACTION_NAME = "FocusTheTextBox"
local textBox = script.Parent
local function handleAction(actionName, inputState, _inputObject)
if actionName == ACTION_NAME and inputState == Enum.UserInputState.End then
textBox:CaptureFocus()
end
end
ContextActionService:BindAction(ACTION_NAME, handleAction, false, Enum.KeyCode.Q)
ReleaseFocus
強制客戶端把 TextBox 卸下。submitted 參數可以在 enterPressed 事件中綜合過 TextBox.FocusLost 參數。
此項目應該與 LocalScript 使用,以便在線上模式中正常運行。
下面顯示的代碼將強制客戶端在選擇 'Texture' 後的 5 秒內退出:
local TextBox = script.Parent
TextBox.Focused:Connect(function()
wait(5)
TextBox:ReleaseFocus()
end)
請注意,上述範例假設它是在本地指令碼中,作為 TextBox 的子。
參數
返回
範例程式碼
local textBox = script.Parent
local function onFocused()
task.wait(5)
textBox:ReleaseFocus()
end
textBox.Focused:Connect(onFocused)
活動
FocusLost
客戶端讓他們的焦點離開 TextBox 時發生 - 通常是客戶端點擊/點擊外的 TextBox 時。這也會發生,如果 TextBox 強制要求他們的焦點放在用戶上。
它可以與 TextBox.Focused 一起使用來跟蹤當 TextBox 獲得和失去專注時。
也參閱 UserInputService.TextBoxFocused 和 UserInputService.TextBoxFocusReleased 以獲得與 Class.UserInputService 服務相關的功能。
此事件只會在 LocalScript 中發生。
參數
一個Boolean指示是否按Enter以失去焦點(真或假)。
一個 InputObject 實例,表示導致文字框遺失專注的輸入類型。
範例程式碼
local gui = script.Parent
local textBox = gui.TextBox
local function focusLost(enterPressed)
if enterPressed then
print("Focus was lost because enter was pressed!")
else
print("Focus was lost without enter being pressed")
end
end
textBox.FocusLost:Connect(focusLost)
local textBox = script.Parent
local function onFocusLost(enterPressed, inputThatCausedFocusLost)
if enterPressed then
print("Player pressed Enter")
else
print("Player pressed", inputThatCausedFocusLost.KeyCode)
end
end
textBox.FocusLost:Connect(onFocusLost)
Focused
當 TextBox 獲得專注時發射 - 通常是客戶端點擊/點擊開始輸入文字時。這也會發射如果 Class.Toolbar 強制專注在用戶上。
它可以與 TextBox.FocusLost 一起使用來跟蹤當 TextBox 獲得和失去專注度。
也參閱 UserInputService.TextBoxFocused 和 UserInputService.TextBoxFocusReleased 以獲得與 Class.UserInputService 服務相關的功能。
此事件只會在 LocalScript 中發生。
範例程式碼
local textBox = script.Parent
local function onFocused()
print("Focused")
end
textBox.Focused:Connect(onFocused)