Roblox의 경험 내 텍스트 채팅 시스템은 플레이어가 라이브 세션에서 텍스트 기반 메시지를 사용하여 서로 통신할 수 있습니다. 시스템은 사용자 지정 요구 사항에 따라 메시지를 확장하고 사용자 지정 플레이어에게 특권을 부
이 가이드는 채팅 시스템의 기능을 확장하기 위한 채팅 워크플로 및 접근 방식을 설명합니다. 사용자 인터페이스(UI)를 사용자 정의하는 방법에 대한 자세한 내용은 사용자 정의 텍스트 채팅 을 참조하십시오.
채팅 워크플로
경험 내 텍스트 채팅 시스템은 사용자 정의 채팅 배송 동작을 확장하는 모든 변경 가능한 클래스와 특정 클래스에서 반환되는 특정 채팅 요소를 나타내는 고정 데이터 개체로 구성됩니다.
변경 가능한 채팅 클래스
경험 내 텍스트 채팅 시스템은 다음과 같은 변경 가능한 클래스를 제공합니다.
- TextChatService — 이 클래스는 전역 채팅 시스템을 관리하는 데 책임이 있습니다, 예를 들어 채팅 메시지 필터링, 조정 및 사용자 권한을 관리하는 등. 서버에서 액세스할 수 있으며, 다른 텍스트 채팅 API 또는 플레이어 작업을 통해 호출할 수 있는 메서드 및 이벤트 집
- TextChannel — 이 클래스는 플레이어가 클라이언트에서 채팅 메시지를 보내고 서버에 표시하는 텍스트 채팅 채널을 나타냅니다. 이를 사용하여 경험에서 텍스트 채널을 생성, 수정 및 관리할 수 있습니다. 또한 플레이어
- TextChatCommand — 이 클래스를 사용하면 플레이어가 특정 작업이나 동작을 수행할 수 있도록 하는 사용자 지정 채팅 명령을 생성할 수 있습니다. 채팅 명령은 플레이어에게 추가 기능 및 상호 작용을 제공하는 데 유용합니다. 또한 단축키를 사용하여 경험을 관리하
변경할 수 없는 채팅 개체
경험 내 텍스트 채팅 시스템에는 다음과 같은 읽기 전용 속성을 가진 고정 개체가 포함되어 있으며 수정할 수 없습니다.
- TextChatMessage : 이 개체는 기본 정보, 메시지 발신자, 원본 메시지, 필터링된 메시지 및 생성 시간과 같은 텍스트 채팅 채널에서 하나의 채팅 메시지를 나타냅니다.
- TextSource : 이 개체는 채널에 있는 플레이어의 상세 권한을 가진 텍스트 채널에 있는 메시지 발신자를 나타냅니다. 플레이어가 여러 개의 텍스트 채널에 있으면 여러 개의 텍스트 원본을 가질 수 있습니다.
채팅 흐름 차트
채팅 메시지 전송 및 배송 프로세스를 통해 변경 가능한 채팅 클래스의 메서드, 콜백 및 이벤트가 클라이언트-서버 모델의 3개 측면에 있는 변경 가능한 채팅 클래스 개체와 함께 작동합니다.
- 메시지를 보내는 플레이어의 로컬 장치인 발신 클라이언트.
- 다른 플레이어의 로컬 장치인 클라이언트를 받습니다.
- 메시지를 보내는 클라이언트에서 메시지를 수신하고 클라이언트에게 배송하는 중계 프로세서입니다.The 서버, which is the central processor for receiving the message from the sending client and handles the delivery to receiving clients.
흐름 차트에 표시된 대로 경험 내 텍스트 채팅 시스템은 다음 단계를 통해 채팅 메시지를 처리합니다.
- 플레이어는 로컬 기기메시지를 보냅니다, TextChannel:SendAsync() 메서드를 트리거합니다. 이 메서드는 메시지를 처리하고 채팅 명령이나 일반 채팅 메시지인지 결정합니다.
- 플레이어 입력이 채팅 명령인 경우 TextChatCommand.Triggered 이벤트를 발생시키고 명령에 정의된 작업을 수행합니다.
- 플레이어 입력이 정규 채팅 메시지인 경우 TextChatService.SendingMessage를 발생시켜 원본 메시지를 발신자에게 표시합니다. 동시에 TextChannel:SendAsync() 패스는 메시지를 서버로 전송합니다.
- 서버는 TextChannel.ShouldDeliverCallback를 발생시키여 설정한 권한 및 Roblox 커뮤니티 필터링 요구 사항에 따라 메시지를 다른 플레이어에게 전달할지 여부를 결정합니다.
- Class.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)
-- 지정된 사용자 ID와 관련된 플레이어를 가져옵니다.
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 를 통해 캐릭터의 크기를 조정하는 채팅 명령을 만드는 방법을 보여줍니다.
Class.TextChatService 내에 있는 TextChatService 인스턴스를 삽입합니다.
이름을 크기 조정 명령 으로 변경하십시오.
그것의 기본 별칭 속성을 /super 및 그의 보조 별칭 을 2> /mini2> 로 설정합니다.
Class.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)
전통 채팅에서 마이그레이션
이 섹션에서는 경험 내 텍스트 채팅 시스템을 사용하여 일반적인 채팅 기능 및 동작을 구현하는 대체 메서드를 제공하여 레거시 채팅 시스템에서 마이그레이션하는 데 도움이 됩니다.
기존 경험의 채팅 시스템을 기존 채팅 시스템에서 인-경험 텍스트 채팅 시스템으로 전환하려면:
탐색기 창에서 TextChatService를 선택합니다.
In the 속성 window, find the 채팅 버전 dropdown and select TextChatService .
기본 기능
두 시스템 모두 기본적인 채팅 기능을 공유하지만, 경험 내 텍스트 채팅 시스템 구현은 일반적으로 더 지속 가능하고 반복하기 더 쉽습니다.
기능 | 레거시 채팅 | 경험 내 텍스트 채팅 | 차이 |
---|---|---|---|
채팅 메시지 보내기 | Players:Chat() | TextChannel:SendAsync() | Class.TextChatService:SendAsync() 메서드는 풍부한 텍스트 서식 지정 및 메시지 우선 순위와 같은 더 고급 채팅 기능을 지원합니다. 또한 적절하지 않은 메시지를 보내는 것을 방지하기 위해 내장 필터링을 포함합니다. |
메시징 콜백 구현 | Chat:InvokeChatCallback()``Class.Chat:RegisterChatCallback() | Class.TextChatService.SendingMessage``Class.TextChatService.OnIncomingMessage | 전통적인 채팅 시스템에서는 메시지를 전달하기 위해 채팅 시스템 이벤트에 함수를 바인딩합니다. 경험 내 텍스트 채팅 시스템의 두 가지 메서드는 더 많은 유연성과 사용자 지정 옵션을 제공합니다. |
사용자 정의 채팅 명령 추가 | ChatService/ChatCommand 모듈 | TextChatCommand | 경험 내 텍스트 채팅 시스템에는 전통적인 채팅 모듈을 사용하는 대신 텍스트 명령을 대표하는 전용 클래스가 있습니다. |
시스템 메시지 표시 | StarterGui:SetCore() 를 사용하는 "ChatMakeSystemMessage" | TextChannel:DisplaySystemMessage() | Class.TextChannel.OnIncomingMessage 콜백은 메시지 모습사용자 정의하려면 TextChatMessageProperties 인스턴스를 반환할 수 있습니다. |
채팅 비활성화 | 게임 설정 Studio 및 ChatWindow/ChatSettings 모듈로 채팅 창 숨기기 | ChatWindowConfiguration.Enabled |
메시지 필터링
경험 내 텍스트 채팅 시스템은 각 플레이어의 계정 정보에 따라 채팅 메시지를 자동으로 필터링하므로 모든 종류의 채팅 메시지에 대해 텍스트 필터링을 수동으로 구현할 필요가 없습니다.
기능 | 레거시 채팅 | 경험 내 텍스트 채팅 |
---|---|---|
개별 플레이어에게 필터링된 메시지 | Chat:FilterStringAsync() | 없음 |
방송 메시지 필터링 | Chat:FilterStringForBroadcast() | 없음 |
창 및 버블 채팅
모든 채팅 창 및 버블 채팅 동작 및 사용자 지정 클래스전통 채팅 시스템과 동일합니다. 전통 채팅 시스
기능 | 레거시 채팅 | 경험 내 텍스트 채팅 |
---|---|---|
채팅 창 활성화 | Class.Chat.LoadDefaultChat``Class.Players.ClassicChat | ChatWindowConfiguration.Enabled |
버블 채팅 활성화 | 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() |