TextService

Tampilkan yang Tidak Digunakan Lagi

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Tidak Dapat Dibuat
Layanan
Tidak Direplikasi

Layanan TextService adalah layanan yang bertanggung jawab secara internal untuk menangani tampilan teks dalam game.

Kelas ini memiliki dua fungsi anggota:

Fungsi TextService:GetTextSize() memberi pengembang kemampuan untuk menghitung ruang yang diperlukan untuk teks spesifik dengan format yang ditentukan, menghasilkan ukuran piksel Vector2 .

Fungsi TextService:FilterStringAsync() diperlukan untuk memfilter teks yang ditentukan oleh pengguna dengan benar (seperti pesan obrolan atau input lainnya) demi keamanan pengguna.Pengembang tidak menggunakan default Roblox Chat , atau memungkinkan pengguna untuk memasukkan teks lainnya harus menggunakan fungsi ini.

Rangkuman

Metode

Properti

Metode

GetTextSize

Menghitung dimensi Vector2 yang akan diambil dengan teks saat menggunakan parameter format dan batas ukuran yang ditentukan.

Catatan, parameter ukuran huruf tidak akan menerima Enum.FontSize Enum.Sebagai gantinya, ukuran bilangan berpasangan dengan Enum.FontSize Enum harus digunakan.Ini tidak sama dengan nilai dari Enum.FontSize Enum.Sebagai contoh, untuk Size11 font, bilangan bulat 11 harus digunakan.

Fungsi ini adalah alternatif yang berguna untuk properti TextLabel.TextBounds dan TextLabel dan TextButton objek.Menggunakan properti TextLabel.TextBounds untuk menghitung teks dimensi yang diperlukan seringkali tidak praktis karena memerlukan objek TextLabel yang harus dibuat.

Dengan GetTextSize, dimensi yang diperlukan oleh string teks tertentu di khusus TextLabel atau TextButton dapat dihitung sebelum objek atau aturproperti teks dibuat.

Pengembang disarankan untuk menambahkan piksel pengisi ke hasil untuk memastikan tidak ada teks yang mati.

Metode ini terbatas hanya pada font yang terdaftar di Enum.Font. Untuk mendapatkan akses ke lebih banyak font, Anda dapat menggunakan TextService:GetTextBoundsAsync() sebagai gantinya.

Parameter

string: string

String yang mana ukuran teks harus dihitung.

Nilai Default: ""
fontSize: number

Angka bulat yang mewakili ukuran font yang digunakan.

Nilai Default: ""
font: Enum.Font

Font yang digunakan.

Nilai Default: ""
frameSize: Vector2

The TextLabel.AbsoluteSize dari objek teks yang akan digunakan. Diperlukan untuk menghitung bagaimana teks akan dibungkus.

Nilai Default: ""

Memberikan nilai

Ukuran ruang yang diperlukan, dalam piksel, oleh string dengan format yang ditentukan.

Contoh Kode

This example showcases a possible usage of the GetTextSize function.

It computes the possible Vector2 dimensions (in pixels) of the string "Hello World" when the font size is 12, the font size SourceSans and the frame size is (1,1).

The expected return of this function is the Vector2 value 9, 13.

TextService: Getting the Text Size

local TextService = game:GetService("TextService")
local function getTextBounds()
local message = "Hello World"
local size = Vector2.new(1, 1)
local bounds = TextService:GetTextSize(message, 12, "SourceSans", size)
return bounds + Vector2.new(1, 1)
end
print(getTextBounds())

FilterAndTranslateStringAsync

Hasil

Terjemahan obrolan tidak didukung dalam obrolan lama.Metode ini tidak lagi didukung dan tidak boleh digunakan.Semua panggilan kembali objek kosong.Menerjemahkan pesan obrolan hanya tersedia melalui TextChatService .

Parameter

stringToFilter: string
Nilai Default: ""
fromUserId: number
Nilai Default: ""
targetLocales: Array
Nilai Default: ""
Nilai Default: "PrivateChat"

Memberikan nilai

FilterStringAsync

Hasil

Fungsi FilterStringAsync memfilter string yang diterima dari pengguna, menggunakan TextService , dan men返ikan TextFilterResult yang dapat digunakan untuk mendistribusikan teks yang disaring dengan benar sesuai kebutuhan

Penggunaan

Metode ini harus dipanggil setiap kali pengguna mengirim pesan.Jangan menyimpan hasil fungsi ini dan gunakan kembali untuk pesan terpisah.Jika pengguna mengirim teks yang sama berkali-kali, metode ini harus dipanggil lagi setiap kali pesan dikirim.Jika hasilnya disimpan dan digunakan kembali deteksi spam dan banyak bentuk filterisasi yang sadar konteks akan rusak dan berisiko membahayakan keselamatan pengguna.Permainan yang tidak tepat menggunakan hasil ter缓存 dapat menghadapi moderasi.

Namun, disarankan untuk menyimpan objek hasil ini untuk menampilkan pesan yang sama kepada pengguna yang bergabung dengan server nanti.Sebagai contoh: ini dapat digunakan untuk dengan aman dan efisien menerapkan log obrolan server yang selalu menggunakan filter terbatas paling sedikit untuk pengguna yang bergabung kemudian, atau untuk menampilkan teks seperti nama hewan peliharaan dengan efisien kepada pengguna yang bergabung dengan permainan setelah hewan peliharaan pertama kali dihasilkan dan disaring nama.

Parameter opsional Enum.TextFilterContext tidak akan mempengaruhi hasil filteran yang disaring dari pencarian. Nilai ini akan digunakan untuk meningkatkan filteran teks Roblox.

Teks pribadi adalah apa pun yang hanya dilihat oleh pemain tertentu, bukan oleh setiap pemain.Sebagai contoh, jika obrolan dilihat oleh satu pemain, atau oleh kelompok pemain yang dipilih, maka obrolan dianggap privat.Obrolan untuk tim atau obrolan yang berpotensi terlihat oleh grupyang lebih luas, seperti server, dianggap publik.Jika Anda tidak yakin apa teks Anda memenuhi syarat, tinggalkan bidang opsional kosong.

Catatan:

  • Metode ini selalu menghasilkan untuk membuat panggilan layanan filter teks
  • Metode ini dapat melempar jika terjadi kesalahan layanan yang tidak dapat diselesaikan.Jika fungsi ini menyebabkan kesalahan, jangan coba kembali permintaan; metode ini menerapkan logika putar ulang sendiri secara internal.Jika metode ini gagal tidak menampilkan teks kepada pengguna mana pun.
  • Metode ini saat ini melempar jika dari userId tidak online di server saat ini.Kami berencana untuk mendukung pengguna yang offline atau di server berbeda di masa depan.

Parameter

stringToFilter: string

Teks yang akan disaring.

Nilai Default: ""
fromUserId: number

ID pemain yang menyaring teks.

Nilai Default: ""

Konteks di mana pesan yang disaring akan digunakan.

Nilai Default: "PrivateChat"

Memberikan nilai

Contoh Kode

This code sample includes a simple demonstration of how TextService:FilterStringAsync() should be implemented in a system where players are allowed to name their pets.

Note, this code sample includes the server-side implementation only (to be placed in a Script). Examples of how to implement the client-side of this system are included under the RemoteEvent and RemoteFunction examples.

Pet Name Filter Example

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local TextService = game:GetService("TextService")
local Players = game:GetService("Players")
local Remotes = Instance.new("Folder")
Remotes.Name = "PetNamingRemotes"
Remotes.Parent = ReplicatedStorage
local UserNamedPet = Instance.new("RemoteEvent")
UserNamedPet.Name = "UserNamedPet"
UserNamedPet.Parent = Remotes
local SendPetName = Instance.new("RemoteEvent")
SendPetName.Name = "SendPetName"
SendPetName.Parent = Remotes
local RequestAllPetNames = Instance.new("RemoteFunction")
RequestAllPetNames.Name = "RequestAllPetNames"
RequestAllPetNames.Parent = Remotes
local filterResults = {}
local function broadcastPetName(userId)
local filterResult = filterResults[userId]
if filterResult then
for _, player in pairs(Players:GetPlayers()) do
if player then
-- spawn a new thread so as to not yield the update
task.spawn(function()
-- grab the filtered string for this user
local toUserId = player.UserId
local filteredString = filterResult:GetNonChatStringForUserAsync(toUserId)
filteredString = filteredString or ""
SendPetName:FireClient(player, userId, filteredString)
end)
end
end
end
end
UserNamedPet.OnServerEvent:Connect(function(player, petName)
local fromUserId = player.UserId
-- pcall to catch errors
local success, result = pcall(function()
return TextService:FilterStringAsync(petName, fromUserId)
end)
if success then
filterResults[fromUserId] = result
broadcastPetName(fromUserId)
else
print("Could not filter pet name")
end
end)
RequestAllPetNames.OnServerInvoke = function(player)
local toUserId = player.UserId
local petNames = {}
-- go through filter results and filter the pet name to be sent
for fromUserId, filterResult in pairs(filterResults) do
local filteredString = filterResult:GetNonChatStringForUserAsync(toUserId)
filteredString = filteredString or ""
-- need to convert userId to string so it can't be sent via a remote function
petNames[tostring(fromUserId)] = filteredString
end
return petNames
end
Players.PlayerRemoving:Connect(function(oldPlayer)
local userId = oldPlayer.UserId
filterResults[userId] = nil
end)

GetFamilyInfoAsync

Hasil

Kembalikan tabel yang berisi nama dan wajah keluarga font.

Tabel yang dikembalikan dibangun seperti ini:


type FaceInfo = {
Name: string, -- Contoh: "Reguler", "Buku", "Italik", "Thin Italic"
Weight: Enum.FontWeight,
Style: Enum.FontStyle, -- Entah Normal atau Italic
}
type FamilyInfo = {
Name: string, -- Contoh: "Source Sans Pro", "Grenze Gotisch"
Faces: {FaceInfo} -- Selalu ada setidaknya 1 tetapi bisa ada hingga 18.
}

Jika keluarga font sudah dimuat oleh panggilan sebelumnya ke GetFamilyInfoAsync , ContentProvider:PreloadAsync() , atau objek teks dengan aturproperti TextLabel.FontFace , maka metode tersebut kembali tanpa menyerah.

Kesalahan

Metode ini bisa gagal karena kesalahan jaringan. Anda harus selalu mengemasnya dalam pcall untuk penanganan kesalahan.

Membuang kesalahan dalam skenario ini:

  • Keluarga yang dilewati adalah string kosong.
  • Mengunduh keluarga gagal.
  • ID aset tidak valid atau menunjuk ke aset yang tidak ada.

Parameter

assetId: ContentId

ID aset keluarga font untuk dicari.

Nilai Default: ""

Memberikan nilai

Informasi tentang keluarga font.

Contoh Kode

This example showcases a possible usage of the TextService:GetFamilyInfoAsync() method.

It prints out information about a font family to the output window.

TextService: Getting font family information

local TextService = game:GetService("TextService")
local familyToCheck = "rbxasset://fonts/families/Arial.json"
-- This is a yield function which may take up to a few seconds to download the font.
local info = TextService:GetFamilyInfoAsync(familyToCheck)
print("Name of the font:", info.Name)
print("Faces:")
for _, face in info.Faces do
print("--------")
print("Name:", face.Name)
print("Weight:", face.Weight.Name)
print("Style:", face.Style.Name)
end

GetTextBoundsAsync

Hasil

Metode ini mirip dengan TextService:GetTextSize() , tetapi menggunakan objek Font alih-alih Enum.Font , yang memiliki akses ke lebih banyak font.

Digunakan untuk mengukur seberapa besar beberapa teks akan diberikan satu set properti seperti string, ukuran, dan font.

Ini adalah fungsi hasil karena beberapa font mungkin perlu dimuat untuk diukur.Jika font sudah dimuat, maka tidak akan menghasilkan.ContentProvider:PreloadAsync() dapat digunakan untuk memastikan font dimuat.

Kesalahan

Metode ini bisa gagal karena kesalahan jaringan. Anda harus selalu mengemasnya dalam pcall untuk penanganan kesalahan.

Membuang kesalahan dalam skenario ini:

  • The GetTextBoundsParams.Font memiliki keluarga kosong.
  • Argumen params adalah nil.
  • Keluarga font atau wajah font gagal download.

Parameter

Referensi ke objek GetTextBoundsParams referensi.

Nilai Default: ""

Memberikan nilai

Ukuran teks sebagai Vector2 .

Contoh Kode

This example shows how you can use TextService:GetTextBoundsAsync().

It measures the size of some text in a specific font, then prints the result.

TextService: Measuring text size

local TextService = game:GetService("TextService")
local params = Instance.new("GetTextBoundsParams")
params.Text = "hello world!"
params.Font = Font.new("rbxasset://fonts/families/GrenzeGotisch.json", Enum.FontWeight.Thin)
params.Size = 20
params.Width = 200
local size = TextService:GetTextBoundsAsync(params)
print("The size of the text is:", size)

GetTextSizeOffsetAsync

Hasil

Parameter

fontSize: number
Nilai Default: ""
font: Enum.Font
Nilai Default: ""

Memberikan nilai

Acara