ด้วย ใน-เอ็กซ์เพรสเซสเต็มข้อความในเกม ระบบบน Roblox ผู้เล่นสามารถสื่อสารกันโดยใช้ข้อความข้างต้นในเซสชันสดได้ ระบบให้ชุดของวิธีและเ
คู่มือนี้ให้คำอธิบายเกี่ยวกับการทำงานแชทและการปรับแต่งให้บริการสนทนาของระบบแชท สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการปรับแต่ง UI ของผู้ใช้แชท (UI) โปรดดู การปรับแต่ง UI ของผู้ใช้แชท
การทำงานแชท
ระบบแชทข้อความในประสบการณ์ประกอบด้วย คลาสที่เปลี่ยนแปลงได้ ที่คุณสามารถขยายเพื่อการจัดส่งการแชทที่ปรับแต่งได้และ ของขวัญข้อมูลดิจิทัล Class
คลาส чатที่เปลี่ยนแปลงได้
ระบบการแชทข้อความในประสบการณ์ ให้บริการคลาสต่อไปนี้:
- TextChatService — คลาสนี้มีความรับผิดชอบในการจัดการระบบการแชททั้งหมด รวมถึงการกรองข้อความแชท เซิร์ฟเวอร์และการให้สิทธิ์ผู้ใช้ สามารถเข้าถึงได้จากเซิร์ฟเวอ
- TextChannel — คลาสนี้เป็นตัวแทนของช่องแชทข้อความข้างล่างจากผู้ใช้ไปยังเซิร์ฟเวอร์และแสดงให้ผู้อื่นเห็นตามข้อมูลที่อนุญาต คุณสามารถใช้มัน
- TextChatCommand — คลาสนี้ช่วยให้คุณสร้างคำสั่งแชทที่กำหนดเองที่ผู้เล่นสามารถเรียกการกระทําหรือพฤติกรรมที่เฉพาะเจาะจงโดยการพิมพ์ตัวละครพิเศษที่มีชื่อตาม
วัตถุแชทที่ไม่เปลี่ยนแปลง
ระบบแชทข้อความในประสบการณ์รวมถึงสิ่งต่อไปนี้ที่เป็นไอมูเล็ตที่มีสถานะอ่านเท่านั้นที่คุณไม่สามารถปรับแก้ได้:
- TextChatMessage : วัตถุนี้เป็นตัวแทนข้อความแชทเดียวในช่องแชทข้อความด้วยข้อมูลพื้นฐานเช่นผู้ส่งข้อความอ้างอิงข้อความเก่าข้อความกรองและเวลาการสร้าง
- TextSource : วัตถุนี้เป็นตัวแทนของผู้ส่งข้อความในช่องแชทข้อความในช่องที่มีสิทธิ์ของผู้เล่นในช่อง หากผู้เล่นอยู่ในหลายช่องแชทข้อความ พวกเขาสามารถมีหลายที่มาของข้อความเช่นกัน
กระดานการแชท
ผ่านการส่งและการจัดส่งข้อความในแชทและกระบวนการส่งมีเมทริค, คันธนู, และเหตุการณ์ของคลาสแชทที่เปลี่ยนแปลงได้สามารถทำงานร่วมกับวัตถุแชทที่เปลี่ยนแปลงได้สามด้านของ รุ่น client-server
- เครื่องส่งสัญญาณซึ่งเป็นอุปกรณ์ท้องถิ่นของผู้ส่งข้อความ
- กำลังจะได้รับลูกค้า ซึ่งเป็นอุปกรณ์ท้องถิ่นของผู้เล่นอื่น
- เซิร์ฟเวอร์ ซึ่งเป็นเครื่องประมวลผลกลางสำหรับการรับข้อความจากลูกค้าส่งและจัดการการจัดส่งไปยังลูกค้าที่ได้รับ
ตามที่แสดงในภาพกระบายการไหลของเรา ระบบแชทข้อความในประสบการณ์จะประมวลผลข้อความแชทผ่านขั้นตอนต่อไปนี้:
- ผู้เล่นส่งข้อความจากอุปกรณ์ของพวกเขา, เรียกใช้วิธี TextChannel:SendAsync() นี้. วิธีนี้ ระบบประมวลผลข้อความและกำหนดว่ามันเป็นคำสั่งการแชทหรือข้อความแชทปกติ
- หากการป้อนข้อความเป็นคำสั่งแชท มันจะเรียกเหตุการณ์ TextChatCommand.Triggered เพื่อดำเนินการตามที่คุณได้กำหนดไว้สำหรับคำสั่ง
- หากข้อความของผู้เล่นเป็นข้อความปกติของการแชท มันจะไปที่ TextChatService.SendingMessage เซิร์ฟเวอร์ในขณะเดียวกัน Class.TextChannel:SendAsync()</
- เซิร์ฟเวอร์ยิง TextChannel.ShouldDeliverCallback เพื่อตรวจสอบว่าจะส่งข้อความไปยังผู้เล่นคนอื่นตามการตั้งค่าและข้อกำหนดการกรองชุมชนของ Roblox หรือไม่
- หาก TextChannel.ShouldDeliverCallback กำหนดว่าข้อความนั้นมีสิทธิ์ส่งไปยังผู้เล่นคนอื่น ๆ เซิร์ฟเวอร์จะใช้การกรองใด ๆ และเปิดไฟล์ TextChannel.OnIncomingMessage สองครั้ง:
- ครั้งแรกบนเครื่องส่งสัญญาณเพื่อสัญญาณว่าเซิร์ฟเวอร์กำลังประมวลผลข้อความผ่านกิจกรรม TextChatService.MessageReceived นี้ สิ่งนี้จะแทนที่ข้อความท้องถิ่นบนเครื่องส่งสัญญาณด้วยข
- ครั้งที่สองคือบนลูกค้าที่ได้รับเพื่อเรียกเหตุการณ์ TextChatService.MessageReceived เพื่อแสดงข้อความให้กับผู้เล่นคนอื่น
มีหลายพื้นที่ของกระบวนการทำงานของระบบแชทที่คุณสามารถขยายและปรับแต่งพฤติกรรมได้ แต่ขั้นตอนในการดำเนินงานของระบบยังคงเหมือนเดิม
การปรับแต่งพฤติกรรมการจัดส่งข้อความ
นอกจากการติดตามพฤติกรรมการส่งข้อความแชทเรื่องการแจ้งเตือนที่เป็นปกติ คุณสามารถใช้ TextChannel.ShouldDeliverCallback การมีส่วนร่วม
- สนับสนุนการแชทแบบกลุ่มที่ผู้เล่นในกลุ่มเดียวกันหรือทีมสามารถสื่อสารระหว่างกันได้
- สนับสนุนการแชทจุดใกล้ที่ผู้เล่นสามารถส่งข้อความได้เฉพาะกับผู้ใกล้ชิด
- ป้องกันผู้เล่นที่มีลักษณะบางอย่างจากการส่งข้อความไปยังผู้อื่น เช่น ป้องกันผู้เล่นที่มีสถานะตายจากการส่งข้อความไปยังผู้เล่นที่ยังมีชีวิตอยู่
- การเพิ่มคุณสมบัติการเดาสิ่งที่ถูกต้องในการแชทไม่มองเห็นได้สำหรับผู้เล่นคนอื่น
ตัวอย่างต่อไปนี้แสดงวิธีการใช้งานแชทสุดพิเศษสำหรับตัวละครผู้เล่นที่อยู่ใกล้กันในสถานที่ มันขยายคืนค่าโดยใช้ TextSource เพ
local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
-- ตัวอย่างนี้ใช้ช่องทั่วไป คุณสามารถแทนที่ด้วยช่องที่มีเฉพาะ
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
-- จุดชื่อตำแหน่งของตัวละครของผู้เล่น
local function getPositionFromUserId(userId: number)
-- รับผู้เล่นที่เกี่ยวข้องกับรหัสผู้ใช้ที่ให้
local targetPlayer = Players:GetPlayerByUserId(userId)
-- หากผู้เล่นมีอยู่ ให้รับตำแหน่งของพวกเขา
if targetPlayer then
local targetCharacter = targetPlayer.Character
if targetCharacter then
return targetCharacter:GetPivot().Position
end
end
-- กลับตำแหน่งเริ่มต้นหากผู้เล่นหรือตัวละครไม่พบ
return Vector3.zero
end
-- ตั้งค่าคืนเรียกสำหรับช่องทั่วไปเพื่อควบคุมการจัดส่งข้อความ
generalChannel.ShouldDeliverCallback = function(textChatMessage: TextChatMessage, targetTextSource: TextSource)
-- รับตำแหน่งของผู้ส่งข้อความและเป้าหมาย
local sourcePos = getPositionFromUserId(textChatMessage.TextSource.UserId)
local targetPos = getPositionFromUserId(targetTextSource.UserId)
-- หากระยะระหว่างผู้ส่งและเป้าหมายน้อยกว่า 50 หน่วย ส่งข้อความ
return (targetPos - sourcePos).Magnitude < 50
end
การสร้างคําสั่งที่กําหนดเอง
ระบบแชทข้อความในประสบการณ์มีคําสั่งแชทที่สร้างขึ้นสําหรับวัตถุประสงค์ทั่ว
ตัวอย่างต่อไปนี้แสดงให้เห็นวิธีการสร้างคำสั่งแชทที่ผู้เล่นสามารถเพิ่มหรือลดขนาดของตัวละครของพวกเขาเมื่อพวกเขาใส่ /super หรือ /mini
ใส่ TextChatCommand ตัวอย่างภายใน TextChatService
เปลี่ยนชื่อมันเป็น SizeCommand
ตั้งค่า รหัสผู้อ้างอิงหลักของมัน เป็น /super และ SecondaryAlias เป็น 1> /mini1>
ใส่ตัวต่อไปนี้ Script ใน ServerScriptService เพื่อกำหนดคำสั่งชุดของชาทที่เพิ่มขนาดของตัวละคร
สคริปlocal TextChatService = game:GetService("TextChatService")local Players = game:GetService("Players")local sizeCommand: TextChatCommand = TextChatService:WaitForChild("SizeCommand")sizeCommand.Triggered:Connect(function(textSource, message)local scaleMult = 1local messageWords = string.split(message, " ")if messageWords[1] == "/super" thenscaleMult = 2elseif messageWords[1] == "/mini" thenscaleMult = 0.5endlocal player = Players:GetPlayerByUserId(textSource.UserId)if player thenlocal character = player.Characterif character thenlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenfor _, child in humanoid:GetChildren() doif child:IsA("NumberValue") thenchild.Value *= scaleMultendendendendendend)
การย้ายจากการแชทในอดีต
ส่วนนี้ช่วยให้คุณในการเคลื่อนย้ายจากระบบ แชทรุ่นก่อน โดยการให้วิธีการอื่นในการใช้งานและพฤติกรรมการแชททั่วไปโดยใช้ระบบการแชทในประสบการณ์
เพื่อให้สามารถเปลี่ยนระบบการแชทของประสบการณ์ที่มีอยู่จากระบบแชทของมรดกไปเป็นระบบแชทข้อความในประสบการณ์ได้:
- ใน หน้าต่าง Explorer เลือก TextChatService 2. ในหน้าต่าง คุณสมบัติ ค้นหา ChatVersion รายการลูกลายและเลือก TextChatService
หน้าตาละคริการใช้งานพื้นฐาน
แม้ว่าทั้งสองระบบจะมีคุณสมบัติการแชทพื้นฐานเดียวกัน แต่การใช้งานระบบแชทในประสบการณ์นั้นจะเป็นมาตรฐานอย่างไรก็ตาม โดยทั่วไปแล้วการใช้งานระบบแชทในประสบการณ์จะเป็นมาตรฐานที่ยั่งยืนและเป็นมาตรฐานมากขึ้น
ความสามารถ | การแชทในอดีต | ใน-การแชทข้อความ | ความแตกต่าง |
---|---|---|---|
ส่งข้อความในแชท | Players:Chat() | TextChannel:SendAsync() | วิธี TextChatService:SendAsync() สนับสนุนคุณสมบัติการแชทขั้นสูงเช่นการจัดรูปแบบข้อความและความสำคัญของข้อความ นอกจากนี้ยังรวมถึงการกรองอย่างติดตั้งเพื่อช่วยป้องกันไม่ให้ข้อความที่ไม่เหมาะสม |
ใช้งานการโพสต์ข้อความ | Chat:InvokeChatCallback()``Class.Chat:RegisterChatCallback() | Class.TextChatService.SendingMessage``Class.TextChatService.OnIncomingMessage | ระบบการแชทในมาตรฐานรุ่นเก่าผูกติดตั้งฟังก์ชันบนระบบเพื่อการส่งข้อความ สองวิธีของระบบการแชทในประสบการณ์มีความยืดหยุ่นและตัวเลือกในการปรับแต่งมากขึ้น |
เพิ่มคําสั่งแชทที่กําหนดเอง | ChatService/ChatCommand โมดูล | TextChatCommand | ระบบการแชทข้อความในประสบการณ์มีคลาสที่เฉพาะเจาะจงสำหรับคำสั่งข้อความเพื่อการปรับแต่งโดยไม่ต้องใช้โมดูลการแชทในอดีต |
แสดงข้อความระบบ | StarterGui:SetCore() โดยใช้ "ChatMakeSystemMessage" | TextChannel:DisplaySystemMessage() | คอลแล็กชัน TextChannel.OnIncomingMessage สามารถกลับมาเป็นตัวอย่าง TextChatMessageProperties ของ Class.TextChat รูปลักษณ์ |
ปิดการแชท | การตั้งค่าเกม ใน Studio และ ChatWindow/ChatSettings โมดูลสำหรับการซ่อนหน้าต่างแชท | ChatWindowConfiguration.Enabled |
การกรองข้อความ
ระบบการแชทในประสบการณ์สามารถกรองข้อความในแชทได้อัตโนมัติตามข้อมูลบัญชีของผู้เล่น ดังนั้นคุณจึงไม่จำเป็นต้องใส่ใจกับการใส่กรองข้อความสําหรับทุกประเภทของข้อความในแชท
ความสามารถ | การแชทในอดีต | ใน-การแชทข้อความ |
---|---|---|
กรองข้อความสำหรับผู้เล่น | Chat:FilterStringAsync() | ไม่มี |
การกรองข้อความการแชท | Chat:FilterStringForBroadcast() | ไม่มี |
หน้าต่างและฟองของการแชท
ทั้งหมดของหน้าต่างการแชทและปฏิสัมพันธ์กับฟองอากาศและตัวเลือกการปรับ
ความสามารถ | การแชทในอดีต | ใน-การแชทข้อความ |
---|---|---|
เปิดใช้งานหน้าต่างแชท | Class.Chat.LoadDefaultChat``Class.Players.ClassicChat | ChatWindowConfiguration.Enabled |
เปิดใช้งาน Bubble แชท | Class.Chat.BubbleChatEnabled``Class.Players.BubbleChat | BubbleChatConfiguration.Enabled |
ตั้งค่าโปรไฟล์หน้าต่างแชท | Players:SetChatStyle() | ChatWindowConfiguration |
กำหนดคุณสมบัติของฟองบับ | Class.Chat:SetBubbleChatSettings()``Class.Chat.BubbleChatSettingsChanged()``Class.Players.BubbleChat 0> Class.Players:SetChatStyle()0> | BubbleChatConfiguration |
เปิดใช้งานฟองอากาศ NPC | Chat:Chat() | TextChatService:DisplayBubble() |