ใน-การแชทข้อความ

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

ด้วย ใน-เอ็กซ์เพรสเซสเต็มข้อความในเกม ระบบบน Roblox ผู้เล่นสามารถสื่อสารกันโดยใช้ข้อความข้างต้นในเซสชันสดได้ ระบบให้ชุดของวิธีและเ

คู่มือนี้ให้คำอธิบายเกี่ยวกับการทำงานแชทและการปรับแต่งให้บริการสนทนาของระบบแชท สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการปรับแต่ง UI ของผู้ใช้แชท (UI) โปรดดู การปรับแต่ง UI ของผู้ใช้แชท

การทำงานแชท

ระบบแชทข้อความในประสบการณ์ประกอบด้วย คลาสที่เปลี่ยนแปลงได้ ที่คุณสามารถขยายเพื่อการจัดส่งการแชทที่ปรับแต่งได้และ ของขวัญข้อมูลดิจิทัล Class

คลาส чатที่เปลี่ยนแปลงได้

ระบบการแชทข้อความในประสบการณ์ ให้บริการคลาสต่อไปนี้:

  • TextChatService — คลาสนี้มีความรับผิดชอบในการจัดการระบบการแชททั้งหมด รวมถึงการกรองข้อความแชท เซิร์ฟเวอร์และการให้สิทธิ์ผู้ใช้ สามารถเข้าถึงได้จากเซิร์ฟเวอ
  • TextChannel — คลาสนี้เป็นตัวแทนของช่องแชทข้อความข้างล่างจากผู้ใช้ไปยังเซิร์ฟเวอร์และแสดงให้ผู้อื่นเห็นตามข้อมูลที่อนุญาต คุณสามารถใช้มัน
  • TextChatCommand — คลาสนี้ช่วยให้คุณสร้างคำสั่งแชทที่กำหนดเองที่ผู้เล่นสามารถเรียกการกระทําหรือพฤติกรรมที่เฉพาะเจาะจงโดยการพิมพ์ตัวละครพิเศษที่มีชื่อตาม

วัตถุแชทที่ไม่เปลี่ยนแปลง

ระบบแชทข้อความในประสบการณ์รวมถึงสิ่งต่อไปนี้ที่เป็นไอมูเล็ตที่มีสถานะอ่านเท่านั้นที่คุณไม่สามารถปรับแก้ได้:

  • TextChatMessage : วัตถุนี้เป็นตัวแทนข้อความแชทเดียวในช่องแชทข้อความด้วยข้อมูลพื้นฐานเช่นผู้ส่งข้อความอ้างอิงข้อความเก่าข้อความกรองและเวลาการสร้าง
  • TextSource : วัตถุนี้เป็นตัวแทนของผู้ส่งข้อความในช่องแชทข้อความในช่องที่มีสิทธิ์ของผู้เล่นในช่อง หากผู้เล่นอยู่ในหลายช่องแชทข้อความ พวกเขาสามารถมีหลายที่มาของข้อความเช่นกัน

กระดานการแชท

ผ่านการส่งและการจัดส่งข้อความในแชทและกระบวนการส่งมีเมทริค, คันธนู, และเหตุการณ์ของคลาสแชทที่เปลี่ยนแปลงได้สามารถทำงานร่วมกับวัตถุแชทที่เปลี่ยนแปลงได้สามด้านของ รุ่น client-server

  • เครื่องส่งสัญญาณซึ่งเป็นอุปกรณ์ท้องถิ่นของผู้ส่งข้อความ
  • กำลังจะได้รับลูกค้า ซึ่งเป็นอุปกรณ์ท้องถิ่นของผู้เล่นอื่น
  • เซิร์ฟเวอร์ ซึ่งเป็นเครื่องประมวลผลกลางสำหรับการรับข้อความจากลูกค้าส่งและจัดการการจัดส่งไปยังลูกค้าที่ได้รับ
A flowchart of the in-experience text chat workflow

ตามที่แสดงในภาพกระบายการไหลของเรา ระบบแชทข้อความในประสบการณ์จะประมวลผลข้อความแชทผ่านขั้นตอนต่อไปนี้:

  1. ผู้เล่นส่งข้อความจากอุปกรณ์ของพวกเขา, เรียกใช้วิธี TextChannel:SendAsync() นี้. วิธีนี้ ระบบประมวลผลข้อความและกำหนดว่ามันเป็นคำสั่งการแชทหรือข้อความแชทปกติ
  2. หากการป้อนข้อความเป็นคำสั่งแชท มันจะเรียกเหตุการณ์ TextChatCommand.Triggered เพื่อดำเนินการตามที่คุณได้กำหนดไว้สำหรับคำสั่ง
  3. หากข้อความของผู้เล่นเป็นข้อความปกติของการแชท มันจะไปที่ TextChatService.SendingMessage เซิร์ฟเวอร์ในขณะเดียวกัน Class.TextChannel:SendAsync()</
  4. เซิร์ฟเวอร์ยิง TextChannel.ShouldDeliverCallback เพื่อตรวจสอบว่าจะส่งข้อความไปยังผู้เล่นคนอื่นตามการตั้งค่าและข้อกำหนดการกรองชุมชนของ Roblox หรือไม่
  5. หาก TextChannel.ShouldDeliverCallback กำหนดว่าข้อความนั้นมีสิทธิ์ส่งไปยังผู้เล่นคนอื่น ๆ เซิร์ฟเวอร์จะใช้การกรองใด ๆ และเปิดไฟล์ TextChannel.OnIncomingMessage สองครั้ง:
    1. ครั้งแรกบนเครื่องส่งสัญญาณเพื่อสัญญาณว่าเซิร์ฟเวอร์กำลังประมวลผลข้อความผ่านกิจกรรม TextChatService.MessageReceived นี้ สิ่งนี้จะแทนที่ข้อความท้องถิ่นบนเครื่องส่งสัญญาณด้วยข
    2. ครั้งที่สองคือบนลูกค้าที่ได้รับเพื่อเรียกเหตุการณ์ 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

  1. ใส่ TextChatCommand ตัวอย่างภายใน TextChatService

  2. เปลี่ยนชื่อมันเป็น SizeCommand

  3. ตั้งค่า รหัสผู้อ้างอิงหลักของมัน เป็น /super และ SecondaryAlias เป็น 1> /mini1>

  4. ใส่ตัวต่อไปนี้ 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 = 1
    local messageWords = string.split(message, " ")
    if messageWords[1] == "/super" then
    scaleMult = 2
    elseif messageWords[1] == "/mini" then
    scaleMult = 0.5
    end
    local player = Players:GetPlayerByUserId(textSource.UserId)
    if player then
    local character = player.Character
    if character then
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    for _, child in humanoid:GetChildren() do
    if child:IsA("NumberValue") then
    child.Value *= scaleMult
    end
    end
    end
    end
    end
    end)

การย้ายจากการแชทในอดีต

ส่วนนี้ช่วยให้คุณในการเคลื่อนย้ายจากระบบ แชทรุ่นก่อน โดยการให้วิธีการอื่นในการใช้งานและพฤติกรรมการแชททั่วไปโดยใช้ระบบการแชทในประสบการณ์

เพื่อให้สามารถเปลี่ยนระบบการแชทของประสบการณ์ที่มีอยู่จากระบบแชทของมรดกไปเป็นระบบแชทข้อความในประสบการณ์ได้:

  1. ใน หน้าต่าง 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.ClassicChatChatWindowConfiguration.Enabled
เปิดใช้งาน Bubble แชทClass.Chat.BubbleChatEnabled``Class.Players.BubbleChatBubbleChatConfiguration.Enabled
ตั้งค่าโปรไฟล์หน้าต่างแชทPlayers:SetChatStyle()ChatWindowConfiguration
กำหนดคุณสมบัติของฟองบับClass.Chat:SetBubbleChatSettings()``Class.Chat.BubbleChatSettingsChanged()``Class.Players.BubbleChat 0> Class.Players:SetChatStyle()0>BubbleChatConfiguration
เปิดใช้งานฟองอากาศ NPCChat:Chat()TextChatService:DisplayBubble()