플레이어 간 음성 채팅은 빠르고 매우 손쉽게 서로 의사소통할 수 있는 일반적인 기능입니다. 하지만 음성 채팅의 구체적인 구현 방법은 온라인 서비스 및 플랫폼마다 다릅니다. 음성 채팅 인터페이스(Voice Chat Interface) 로 에픽 온라인 서비스 (Epic Online Services, EOS), Vivox, 최신 게이밍 콘솔 등에 커스텀 코드를 작성하지 않아도 다양한 서비스에서 음성 채팅을 편하게 작동할 수 있습니다. 음성 채팅 인터페이스는 음성 채널 참가, 입력 및 출력 디바이스 선택, 다른 사용자 음소거 또는 블록, 오디오 데이터 발신 및 수신 등 음성 채팅을 제품에 통합하는 데 필요한 모든 기능을 지원하는 API를 제공합니다.
EOS를 음성 채팅 제공자로 사용할 계획이라면 EOS 음성 채팅 플러그인 문서를 읽고 제품과 함께 구동하도록 설정하는 방법에 관한 구체적인 정보를 알아보세요.
사용자 관리
음성 채팅 인터페이스는 사용자마다 음성 채팅 유저 인터페이스(Voice Chat User Interface) 를 인스턴스화하여 각 사용자를 식별합니다. 이렇게 사용자를 분리하면 시스템에서 수많은 로컬 사용자를 지원할 수 있을 뿐만 아니라, 시스템 전체부터 사용자별까지 넓은 범위의 비헤이비어 및 세팅을 구분할 수도 있습니다.
생성 및 소멸
사용자 간에 이루어지는 음성 채팅을 고려하여, CreateUser
함수로 최소 하나 이상의 로컬 음성 채팅 사용자(Voice Chat User) 를 생성해야 합니다. 동일한 시스템에 다수의 사용자를 지원하는 서비스나 플랫폼을 사용할 경우, CreateUser
함수를 여러 번 호출하면 호출마다 새 IVoiceChatUser
인터페이스를 반환합니다. 생성한 음성 채팅 유저 인터페이스의 인스턴스는 각 사용자에 대해 모든 음성 채팅 인터랙션을 수행합니다. 음성 채팅 유저 인터페이스가 불필요해지면 잊지 말고 해당 인터페이스에 ReleaseUser
함수를 호출하세요. 자세한 추가 정보는 다음 레퍼런스 세부 항목을 참조하세요.
코드 플로 레퍼런스
자체적으로 IVoiceChat 및 IVoiceChatUser 인스턴스를 생성하려면 다음 과정을 따르십시오. 우선 IVoiceChat 인스턴스를 하나 생성하고 초기화한 다음, 이 인스턴스를 사용해 로컬 사용자(혹은 플레이어)별로 IVoiceChatUser 인스턴스를 하나씩 생성합니다. 사용자는 IVoiceChatUser 인스턴스를 사용해 신뢰성 있는 서버 채널에 수동으로 입장하거나 나갈 수 있고, 다른 사용자와 음성 채팅을 진행할 수 있습니다. 음성 채팅을 종료할 준비가 되면(대부분은 애플리케이션을 종료하는 도중 진행) 생성한 인스턴스를 전부 초기화 해제합니다. 해당 플로에는 다음 함수가 포함되며, 서술한 함수들을 적절하게 호출해야 합니다.
함수 | 용도 |
---|---|
IVoiceChat::Initialize |
IVoiceChat 인스턴스를 초기화합니다. 생성한 인스턴스마다 이 함수를 호출해야 사용할 수 있습니다. |
IVoiceChat::Connect |
미리 설정된 음성 서버에 연결합니다. |
IVoiceChat::CreateUser |
IVoiceChatUser 인터페이스 인스턴스를 생성합니다. 채널에 참가하려는 로컬 사용자마다 로그인하려면 인스턴스가 필요합니다. 해당 플로에 속한 다른 함수와 다르게 언제든 CreateUser 를 호출할 수 있습니다. |
IVoiceChatUser::Login |
로컬 사용자를 음성 채팅 서버에 로그인시킵니다. PlayerName 파라미터는 사용자의 EOS 제품 ID이며, EOS_ProductUserId_ToString API를 사용해 스트링화 되고 UTF8_TO_TCHAR이나 비슷한 형식을 갖춘 FString으로 변환됩니다. 대상이 되는 EOS 제품 ID가 EOSVoiceChat에서 사용하는 플랫폼 인스턴스의 연결 인터페이스를 통해 로그인될 필요는 없습니다. 유효한 EOS 제품 ID면 됩니다. 필수 인증은 신뢰성 있는 서버에 의해 채널 참가 크리덴셜의 형태로 제공되며, 이 크리덴셜은 IVoiceChatUser::JoinChannel 로 전달됩니다. |
IVoiceChatUser::JoinChannel |
서버에 로그인한 후 채널에 참가합니다. 사용자는 동시에 여러 채널에 참가할 수 있으며 채널을 나가거나 다시 참가할 수도 있습니다. 각 채널은 이 시점에서 각자 플로를 따릅니다. 해당 프로세스에는 크리덴셜이 필요합니다. 크리덴셜을 얻는 방법에 관한 정보는 채널 참가하기의 섹션을 참조하세요. |
IVoiceChatUser::LeaveChannel |
(선택사항) 로컬 사용자가 JoinChannel 로 참가했던 채널을 나가도록 합니다. |
IVoiceChatUser::Logout |
(선택사항) 음성 채팅 서버에 있는 로컬 사용자를 로그아웃시킵니다. 로그아웃 시 사용자는 모든 채널을 나가게 됩니다. 로그아웃한 후에도 Login 을 호출하여 새 인터페이스 인스턴스를 생성하지 않고 다시 로그인할 수 있습니다. |
IVoiceChat::Disconnect |
(선택사항) 음성 서버와의 연결을 해제합니다. 호출하면 사실상 사용자가 참가한 모든 채널을 로그아웃하고 나갑니다. |
IVoiceChat::Uninitialize |
IVoiceChat 인터페이스 인스턴스를 종료합니다. 이 함수를 호출하면 사용자가 참가한 모든 채널을 나가고 로그아웃하며 음성 채팅 서버 연결을 해제합니다. 보통은 애플리케이션을 종료하는 도중에 호출됩니다. |
사용자 세팅 환경설정
음성 채팅 서비스에 사용자별로 설정할 수 있는 세팅이 존재하는 경우도 있습니다. 특정 세팅이나 수락 가능한 값은 서비스마다 다를 수 있지만, 음성 채팅 인터페이스에서는 SetSetting
및 GetSetting
함수로 해당 기능을 통합할 수 있습니다. 두 함수 모두 FString
을 키 및 값 유형으로 사용합니다.
블록 및 음소거
플레이어 이름 목록에 BlockPlayers
및 UnblockPlayers
를 사용하여 목록에 포함된 모든 플레이어를 블록하거나 블록 해제할 수 있습니다. 플레이어를 음소거하거나 해제하려면 SetPlayerMuted
를 사용합니다. IsPlayerMuted
를 사용하면 지정한 플레이어가 음소거되었는지 확인할 수 있습니다.
오디오 디바이스 관리
사용자의 오디오 입력 및 출력 디바이스를 간단하게 관리할 수 있습니다. 사용자에게 사용할 디바이스에 관한 옵션을 제공하거나 디폴트 옵션에서 다른 입력 및 출력 디바이스를 선택하려는 경우, 디바이스를 사용자의 시스템에 쿼리할 수 있습니다. 또한 음소거 옵션을 포함하여 디바이스의 볼륨을 조정할 수 있습니다.
디바이스 식별 및 선택
GetInputDeviceInfo
및 GetOutputDeviceInfo
를 사용하면 현재 사용하는 입력 및 출력 디바이스를 각각 식별할 수 있습니다. GetDefaultInputDeviceInfo
및 GetDefaultOutputDeviceInfo
를 호출하여 기본 디바이스를 식별하거나, GetAvailableInputDeviceInfos
및 GetAvailableOutputDeviceInfos
를 사용하여 모든 사용 가능한 디바이스의 목록을 얻을 수도 있습니다. 사용하려는 디바이스를 파악한 후 SetInputDeviceId
또는 SetOutputDeviceId
를 호출하여 선택할 수 있습니다.
볼륨 및 음소거 변경
SetAudioInputVolume
및 SetAudioOutputVolume
으로 디바이스의 볼륨을 조절하거나, GetAudioInputVolume
및 GetAudioOutputVolume
으로 현재 값을 확인할 수 있습니다. 비슷한 원리로 SetAudioInputDeviceMuted
및 SetAudioOutputDeviceMuted
를 사용하면 디바이스에 음소거(또는 음소거 해제)를 할 수 있으며, GetAudioInputDeviceMuted
및 GetAudioOutputDeviceMuted
를 사용하면 디바이스가 현재 음소거 상태인지를 알려줍니다.
다른 사용자와 채팅하기
사용자들끼리 음성 채팅을 진행하려면, 모든 사용자가 로그인하고 음성 채팅 인터페이스가 음성 채팅 서버에 연결되어 있어야 합니다.
참가 및 나가기
다른 사용자와 채팅 시 3중 연결이 진행됩니다. 음성 채팅 인터페이스는 음성 채팅 서버에 연결되어야 하고, 음성 채팅 유저 인터페이스는 로그인해야 하며, 마지막으로 음성 채팅 유저 인터페이스는 다른 사용자가 있는 채널에 참가해야 합니다.
우선 음성 채팅 사용자의 Login
을 호출한 다음, 음성 채팅 인터페이스의 Connect
함수를 호출하고 FOnVoiceChatConnectCompleteDelegate
콜백 함수에서 연결에 성공했는지 확인하는 동안 대기합니다. 언제든 IsConnected
를 호출해 연결 상태를 확인할 수 있습니다. 연결되지 않은 경우 IsConnecting
에서 현재 연결을 시도하는 중인지를 알려 줍니다.
연결된 동안에는 GetChannels
로 서버의 채널 목록을 쿼리하고, JoinChannel
및 LeaveChannel
함수로 다양한 그룹 대화에 참여할 수 있습니다.
채팅이 끝나면 Disconnect
를 호출해 서버와의 연결을 해제합니다. 호출하면 음성 채팅 인터페이스의 서버 연결을 해제하여 모든 로컬 사용자의 음성 채팅을 중단합니다. 특정 사용자만 로그아웃시키려면 해당 사용자의 음성 채팅 유저 인터페이스에서 Logout
함수를 호출합니다. 종료하기 전에는 모든 사용자의 연결을 해제하고 로그아웃해야 합니다.
서버 연결, 연결 해제 등 전체 로컬 시스템에 영향을 미치는 함수는 음성 채팅 인터페이스에서 작동합니다. 채널 참가 또는 나가기, 오디오 하드웨어와의 인터랙션 등 한 명의 로컬 플레이어만 대상으로 하는 작업은 음성 채팅 유저 인터페이스에서 작동합니다.
신호 전송
시스템은 사용자가 참가한 채널을 통해 사용자의 오디오 입력 신호를 다른 사용자에게 전송합니다. TransmitToAllChannels
를 사용하면 현재 사용자가 참가한 모든 채널에 신호를 전송하고, TransmitToSpecificChannel
을 사용하면 특정 채널에만 전송합니다. TransmitToNoChannels
를 사용하면 모든 채널 신호 전송을 중단합니다.