Sistem obrolan teks dalam pengalaman yang didukung oleh TextChatService, memungkinkan pemain untuk dengan mudah berkomunikasi dan berinteraksi satu sama lain dalam pengalaman langsungSelain mendukung obrolan teks default, Anda dapat kustomisasi antarmuka pengguna depan.
Konfigurasi jendela obrolan
Jendela obrolan keseluruhan terdiri dari:
- Jendela obrolan
- Bar masuk
- Tab saluran (opsional)

Tab saluran dinonaktifkan secara default dan setiap komponen dapat diaktifkan dan dimatikan di Studio atau melalui scripting:
Di jendela Explorer, perluas cabang TextChatService dan pilih ChatWindowConfiguration , ChatInputBarConfiguration , atau ChannelTabsConfiguration .Kemudian aktifkan atau nonaktifkan komponen di jendela Properti.

Ketika ChannelTabsConfiguration diaktifkan, masing-masing default TextChannel muncul di tab seperti yang dijelaskan dalam tabel berikut.Selain itu, setiap kustom TextChannel membuat tab yang sesuai dengan properti channelName.
Saluran channel | Nama tab |
---|---|
RBXUmum | Jenderal |
SistemRBX | Umum (dikombinasikan menjadi satu tab dengan RBXGeneral ) |
Tim RBX | Tim |
RBXWhisper | Nama pengguna pemain lain |
Tampilan penampilan
Penampilan jendela obrolan keseluruhan dapat disesuaikan melalui ChatWindowConfiguration .

Propinsi | Deskripsi | Standar |
---|---|---|
BackgroundColor3 | Color3 warna latar belakang jendela obrolan. | [25, 27, 29] |
BackgroundTransparency | Transparansi latar belakang jendela chat. | 0.3 |
FontFace | Font dari teks jendela obrolan. | BuilderSansMedium |
TextColor3 | Color3 dari teks jendela obrolan. | [255, 255, 255] |
TextSize | Ukuran teks jendela obrolan. | 14 |
TextStrokeColor3 | Color3 dari stroke untuk teks jendela obrolan. | [0, 0, 0] |
TextStrokeTransparency | Transparansi garis untuk teks jendela obrolan. | 0.5 |
HorizontalAlignment | Penyesuaian horizontal dari jendela obrolan. | Left |
VerticalAlignment | Penyesuaian vertikal jendela obrolan. | Top |
HeightScale | Skala ketinggian jendela obrolan relatif terhadap ukuran layar. | 1 |
WidthScale | Skala lebar jendela obrolan relatif terhadap ukuran layar. | 1 |
Tampilan bilah penampilan
Tampilan bilah input obrolan dapat disesuaikan melalui ChatInputBarConfiguration.

Propinsi | Deskripsi | Standar |
---|---|---|
BackgroundColor3 | Color3 warna latar belakang dari bilah input obrolan. | [25, 27, 29] |
BackgroundTransparency | Transparansi latar belakang bilah input obrolan. | 0.2 |
FontFace | Font dari teks input obrolan. | BuilderSansMedium |
PlaceholderColor3 | Color3 dari teks input obrolan penanda. | [178, 178, 178] |
TextColor3 | Color3 dari teks masuk obrolan yang dimasukkan oleh pemain. | [255, 255, 255] |
TextSize | Ukuran teks input obrolan. | 14 |
TextStrokeColor3 | Color3 warna stroke teks input obrolan. | [0, 0, 0] |
TextStrokeTransparency | Transparansi stroke untuk teks masuk obrolan. | 0.5 |
AutocompleteEnabled | Apakah sistem obrolan teks menunjukkan opsi autocomplete untuk emoji dan perintah.Emoji diselesaikan secara otomatis dengan mengetik : diikuti dengan karakter non-spasi, sementara perintah diselesaikan secara otomatis dengan mengetik /. | true |
KeyboardKeyCode | Pemain kunci tambahan dapat menekan untuk memicu fokus pada bilah input obrolan default. | Slash |
Tampilan tab penampilan
Penampilan tab saluran adalah dapat disesuaikan melalui .

Propinsi | Deskripsi | Standar |
---|---|---|
BackgroundColor3 | Color3 warna latar belakang tab saluran. | [25, 27, 29] |
BackgroundTransparency | Transparansi latar belakang tab saluran. | 0 |
HoverBackgroundColor3 | Color3 warna latar belakang tab saat melayang di atasnya. | [125, 125, 125] |
FontFace | Font untuk teks di tab saluran. | BuilderSansBold |
TextColor3 | Color3 dari teks di tab yang tidak dipilih. | [175, 175, 175] |
SelectedTabTextColor3 | Color3 dari teks di tab yang dipilih. | [255, 255, 255] |
TextSize | Ukuran teks di tab saluran. | 18 |
TextStrokeColor3 | Color3 warna stroke teks di tab saluran. | [0, 0, 0] |
TextStrokeTransparency | Transparansi stroke untuk teks di tab saluran. | 1 |
Sesuaikan pesan
Anda dapat menyesuaikan penampilan tubuh pesan obrolan dan pr prefik menggunakan ChatWindowMessageProperties dan TextChatService.OnChatWindowAdded panggilan balik tanpa menggantikan UI yang ada.Opsi kustomisasi memungkinkan Anda untuk memodifikasi tampilan pesan obrolan untuk sesuai dengan tema pengalaman Anda, dan Anda juga dapat mengurutkan atau menyoroti pesan dari berbagai kelompok pengguna dengan memberikan prefiks warna atau menambahkan tag obrolan.
Nama pengguna warna
Ketika pengguna mengirim pesan obrolan, bagian prefiks dari pesan ditampilkan sebagai DisplayName .Secara default, nama setiap pengguna diwarnai sesuai dengan Player.TeamColor tetapi Anda dapat mengubah warna nama obrolan menggunakan ChatWindowMessageProperties dan OnChatWindowAdded .Berikut adalah LocalScript di StarterPlayerScripts menugaskan warna yang telah ditentukan kepada setiap pengguna, memilih secara acak dari tabel warna RGB.

Skrip Lokal - Nama Pengguna Acak
local TextChatService = game:GetService("TextChatService")
local chatWindowConfiguration = TextChatService.ChatWindowConfiguration
local nameColors = {
Color3.fromRGB(255, 0, 0),
Color3.fromRGB(0, 255, 0),
Color3.fromRGB(0, 0, 255),
Color3.fromRGB(255, 255, 0),
}
TextChatService.OnChatWindowAdded = function(message: TextChatMessage)
local properties = chatWindowConfiguration:DeriveNewMessageProperties()
local textSource = message.TextSource
if textSource then
local index: number = (textSource.UserId % #nameColors) + 1
local randomColor: Color3 = nameColors[index]
properties.PrefixTextProperties = chatWindowConfiguration:DeriveNewMessageProperties()
properties.PrefixTextProperties.TextColor3 = randomColor
end
return properties
end
Anda juga dapat menerapkan gradien warna dan transparansi ke prefiks pesan warna menggunakan UIGradient .

Warna Nama Pengguna Gradien
local TextChatService = game:GetService("TextChatService")
local chatWindowConfiguration = TextChatService.ChatWindowConfiguration
local gradient = Instance.new("UIGradient")
gradient.Color = ColorSequence.new{
ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 0, 0)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(255, 255, 0)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 0, 255))
}
TextChatService.OnChatWindowAdded = function(message: TextChatMessage)
local properties = chatWindowConfiguration:DeriveNewMessageProperties()
local textSource = message.TextSource
if textSource then
properties.PrefixTextProperties = chatWindowConfiguration:DeriveNewMessageProperties()
gradient:Clone().Parent = properties.PrefixTextProperties
end
return properties
end
Kustomisasi teks kaya
Tag warna teks kaya font dapat digunakan untuk memformat pesan obrolan, berguna jika Anda ingin menerapkan formatasi ke bagian pesan yang sangat spesifik.Perhatikan bahwa teks kaya tidak mendukung gradien, tetapi contoh kode berikut menunjukkan bagaimana Anda dapat memindahkan nama pengguna (disimpan di TextChatMessage.PrefixText ) ke dalam tubuh pesan dan kemudian menerapkan label teks kaya hanya pada bagian nama.

Kustomisasi Teks Kaya
local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
local chatWindowConfiguration = TextChatService.ChatWindowConfiguration
local gradient = Instance.new("UIGradient")
gradient.Color = ColorSequence.new{
ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 0, 0)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(255, 255, 0)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 0, 255))
}
TextChatService.OnChatWindowAdded = function(message: TextChatMessage)
local properties = chatWindowConfiguration:DeriveNewMessageProperties()
if message.TextSource then
properties.PrefixText = "[VIP]"
properties.Text = string.format("<font color='#00ffff'>%s</font>", message.PrefixText) .. " " .. message.Text
properties.PrefixTextProperties = chatWindowConfiguration:DeriveNewMessageProperties()
gradient:Clone().Parent = properties.PrefixTextProperties
end
return properties
end
Kirim pesan dari sumber non-pemain
Terkadang, Anda mungkin ingin menampilkan dialog non-pemain di jendela obrolan, seperti "pidato" dari sistem alamat publik atau karakter non-pemain.
Sistem
Untuk mengirimkan pesan sistem ke pemain lokal, panggil DisplaySystemMessage() dari saluran default RBXGeneral dengan prefiks sebelum nama displaypemain.
Skrip Klien
local Players = game:GetService("Players")local TextChatService = game:GetService("TextChatService")local player = Players.LocalPlayerlocal generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGenerallocal PREFIX = "[Guide] Welcome "-- Kirim "pesan sistem" ke pemain dengan nama tampilan ditambahkangeneralChannel:DisplaySystemMessage(PREFIX .. player.DisplayName)

Untuk panduan yang lebih terperinci tentang cara menyesuaikan tampilan pesan sistem, lihat Menyesuaikan pesan sistem.
Pesan sistem default
Ketika TextChatService.CreateDefaultTextChannels adalah true, salah satu saluran teks default adalah saluran RBXSystem.Skrip obrolan default secara otomatis menampilkan pesan sistem di channelini.Anda dapat menyesuaikan tampilan pesan ini menggunakan panggilan balik TextChannel.OnIncomingMessage.
Anda mungkin ingin menyesuaikan atau mengubah pesan sistem yang dikeluarkan secara otomatis oleh sistem obrolan.Karena pesan sistem default diterjemahkan untuk pengguna, Anda harus merujuknya dengan TextChatMessage.Metadata dalam panggilan obrolan teks jika Anda ingin menyesuaikan penampilan mereka.
Di bawah ini adalah referensi pesan sistem default yang dipancarkan oleh sistem obrolan:
metadata | Deskripsi |
---|---|
Roblox.ChatTranslation.ChatWindow.SystemMessage | Menunjukkan bahwa sistem dapat menerjemahkan pesan obrolan untuk Pemain |
Roblox.Notification.Friend.Joined | Tampil ketika salah satu teman Pemain bergabung dengan pengalaman |
Roblox.MessageStatus.Peringatan.Floodchecked | Tampil ketika Pesan Obrolan Teks yang dikirim Pemain dibatasi oleh Server |
Roblox.MessageStatus.Peringatan.TextFilterGagal | ditampilkan ketika Pesan Obrolan Teks yang dikirim Pemain tidak dapat ditampilkan karena masalah Filter Teks |
Roblox.MessageStatus.Peringatan.InvalidPrivacySettings | Tampil ketika pengaturan privasi Pemain mencegah mereka mengirim Pesan Obrolan Teks |
Roblox.MessageStatus.Peringatan.MessageTerlalu Panjang | ditampilkan saat Pemain mengirim Pesan Obrolan Teks dengan konten yang terlalu panjang |
Roblox.MessageStatus.Peringatan.Tidak Dikenal | Tampil ketika sistem gagal mengirimkan Pesan Obrolan Pemain karena alasan yang tidak diketahui |
Roblox.Help.Info | Tampilkan respons dari RBXHelpCommand TextChatCommand |
Roblox.Version.Info | Tampilkan respons dari RBXVersionCommand TextChatCommand |
Roblox.Team.Success.SekarangDiTim | ditampilkan saat tim Pemain berubah |
Roblox.Team.Error.CannotTeamChatJika Tidak Ada di Tim | ditampilkan saat Pemain mengaktifkan RBXTeamCommandTextChatCommand tanpa berada di Team |
Roblox.Whisper.Info.Sukses | Tampil ketika Pemain berhasil memulai percakapan Whisper |
Roblox.Whisper.Welcome.Sent | ditampilkan saat memasukkan Saluran Teks Whisper |
Roblox.Whisper.Error.Tidak Bisa Berbisik ke Diri Sendiri | Tanggapan kesalahan dari RBXWhisperCommand TextChatCommand |
Roblox.Whisper.Error.TargetTidakAda | Tanggapan kesalahan dari RBXWhisperCommand TextChatCommand |
Roblox.Whisper.Error.Terlalu Banyak Pertandingan | Tanggapan kesalahan dari RBXWhisperCommand TextChatCommand |
Roblox.Whisper.Error.Tidak diketahui | Tanggapan kesalahan dari RBXWhisperCommand TextChatCommand |
Roblox.Emote.Error.Tidak ada | Tanggapan kesalahan dari RBXEmoteCommand TextChatCommand |
Roblox.Emote.Error.UserEmotesTak Diaktifkan | Tanggapan kesalahan dari RBXEmoteCommand TextChatCommand |
Roblox.Emote.Error.TemporarilyTak Tersedia | Tanggapan kesalahan dari RBXEmoteCommand TextChatCommand |
Roblox.Emote.Error.Tidak Didukung | Tanggapan kesalahan dari RBXEmoteCommand TextChatCommand |
Roblox.Emote.Error.Beralih ke R15 | Tanggapan kesalahan dari RBXEmoteCommand TextChatCommand |
Roblox.Emote.Error.AnimationPlaying | Tanggapan kesalahan dari RBXEmoteCommand TextChatCommand |
Roblox.Mute.Error.Playerynom tidak ditemukan | Tanggapan kesalahan dari RBXMuteCommand TextChatCommand |
Roblox.Mute.Error.MultipleMatches | Tanggapan kesalahan dari RBXMuteCommand TextChatCommand |
Roblox.Mute.Error.Tidak Bisa Mute Diri | Tanggapan kesalahan dari RBXMuteCommand TextChatCommand |
Roblox.Mute.Info.Berhasil | Respon keberhasilan dari RBXMuteCommand TextChatCommand |
Roblox.Unmute.Error.Pemain tidak ditemukan | Tanggapan kesalahan dari RBXUnmuteCommand TextChatCommand |
Roblox.Unmute.Error.MultipleMatches | Tanggapan kesalahan dari RBXUnmuteCommand TextChatCommand |
Roblox.Unmute.Error.Tidak Bisa Mute Diri | Tanggapan kesalahan dari RBXUnmuteCommand TextChatCommand |
Roblox.Unmute.Info.Berhasil | Respons sukses dari RBXUnmuteCommand TextChatCommand |
NPC/objek
Anda juga dapat menyulitkan dialog non-pemain dan menambahkan gelembung obrolan untuk membuatnya tampak seperti pesan berasal dari NPC atau objek di dunia 3D.
Skrip Klien
local TextChatService = game:GetService("TextChatService")
local Workspace = game:GetService("Workspace")
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
TextChatService.OnIncomingMessage = function(textChatMessage: TextChatMessage)
local properties = Instance.new("TextChatMessageProperties")
-- Periksa pesan sistem yang berisi metadata
if not textChatMessage.TextSource and textChatMessage.Metadata ~= "" then
-- Tambahkan pr prefik untuk membuat pesan terlihat seperti dikirim oleh pemain
properties.PrefixText = string.format("<font color='#%s'>%s: </font>", "#50C999", textChatMessage.Metadata)
-- Tambahkan obrolan gelembung
TextChatService:DisplayBubble(Workspace.Statue, textChatMessage.Text)
end
return properties
end
local message = "Welcome! I will be your guide."
local speakerName = "Ancient Knight"
generalChannel:DisplaySystemMessage(message, speakerName)
