
Unity에서 Discord Social SDK를 이용한 근접 음성 채팅 구현
요약
Unity 환경에서 Discord Social SDK를 활용하여 근접 음성 채팅(Proximity Voice Chat) 기능을 구현하는 방법을 설명합니다. 로비 생성, 오디오 라우팅, 리치 프레젠스 설정을 통해 멀티플레이어 게임 내 공간 음향을 구축하는 과정을 다룹니다.
핵심 포인트
- Discord Social SDK를 통한 로비 생성 및 플레이어 초대 구현
- 오디오 콜백과 Spatial Blend 설정을 이용한 근접 기반 음성 채팅 구현
- Rich Presence를 활용한 실시간 게임 상태 공유 및 참여 유도
- 로비 시크릿을 이용한 안정적인 멀티플레이어 세션 연결
비디오: Unity에서 Discord Social SDK를 이용한 근접 음성 채팅 구현
채널: Unity
길이: 4분 50초
출처: 자막 (자동 생성, 영어)
스크립트:
멀티플레이어 근접 음성 채팅 (proximity voice chat) 게임을 처음부터 구축하는 것은 어려울 수 있습니다. 소음 억제 (Noise suppression), 오디오 취소 (audio cancellation), 로비 (lobbies), 그리고 초대 (invites)는 개발자가 제대로 구현하기 까다로운 심층적인 기술적 과제들입니다. >> Discord의 새로운 Social SDK는 이 모든 것들을 더 쉽게 만들어 줍니다. Social SDK를 사용하여 근접 음성 채팅 기반의 게임을 만들기 위해서는 몇 가지 작업이 필요합니다. 먼저, 친구들을 초대할 수 있는 로비 (lobby)를 설정해야 합니다. 그런 다음, 오디오 콜백 (audio callbacks)과 함께 통화를 시작하여 우리가 직접 오디오를 라우팅 (route)할 수 있도록 합니다. 그렇게 하면 로비에 참여할 수 있는 친구들이 이제 음성으로 연결됩니다.
거기에서, 우리는 Discord의 오디오를 각 플레이어 캐릭터의 오디오 소스 (audio source)로 라우팅합니다. 이를 통해 각 플레이어의 목소리가 씬 (scene) 내의 오디오 소스를 통해 재생될 수 있습니다. 오디오 소스의 공간 블렌드 (spatial blend)를 1로 설정하면, 해당 목소리들이 각 캐릭터와 함께 움직이는 근접 기반 오디오 (proximity-based audio)로 변합니다. >> 이것이 전반적인 개요입니다. 이제 코드로 들어가 보겠습니다. 먼저 플레이어들이 참여할 수 있는 로비를 만드는 것부터 시작하겠습니다. >> 플레이어들을 연결하려면 Discord Social SDK로 로비를 생성해야 합니다. 로비를 생성하는 플레이어의 경우, 새로운 로비 시크릿 (lobby secret)을 생성해야 합니다.
그런 다음 create 또는 join lobby를 호출하고, 시크릿을 전달하여 로비 생성 결과가 담긴 콜백 (callback)을 받습니다. 기존 로비에 참여하는 플레이어의 경우, 코드는 매우 유사합니다. 이는 이미 초대를 받았거나 참여 요청을 받은 플레이어를 위한 것이므로, 그들은 이미 로비 시크릿을 가지고 있을 것입니다. 우리는 이를 로컬에 저장하고 해당 시크릿으로 create 또는 join lobby를 호출합니다. Social SDK는 똑똑해서 만약 로비가 이미 존재한다면, 새로운 것을 만드는 대신 해당 로비에 참여하게 됩니다. >> 두 경로 모두 플레이어가 로비에 참여하면 동일한 콜백을 공유합니다.
여기서 우리는 로비 참여가 성공했는지 확인합니다. 실패했다면 에러를 로그로 남기고, 성공했다면 로비 ID를 저장합니다. 여기서 가장 중요한 것 중 하나는 리치 프레젠스 (Rich Presence)를 설정하는 것입니다. 리치 프레젠스 (Rich Presence)는 플레이어가 어떤 게임을 플레이하고 있는지 보여주는 Discord의 상태 정보입니다. 이미지, 버튼을 추가할 수 있으며 실시간으로 업데이트할 수 있습니다. Social SDK의 update rich presence 메서드는 activity 객체를 인자로 받으며, 여기에 로비 정보를 포함합니다. 리치 프레젠스 (Rich Presence)에 로비 데이터를 포함함으로써, 다른 플레이어의 친구들이 해당 게임에 참여 요청을 보낼 수 있습니다.
우리는 activity type을 playing으로 설정하고, 상태 텍스트를 추가하며, 로비 시크릿 (lobby secret), 로비 ID (lobby ID), 그리고 최대 인원수 (max size)를 포함합니다. 리치 프레젠스 (Rich Presence) 설정이 완료되면, 로컬 플레이어와 기존의 모든 원격 플레이어 (remote players)를 스폰합니다. 원격 플레이어 (remote player)는 이 로비에 있는 다른 플레이어들의 위치, 움직임, 애니메이션을 동기화하는 래퍼 (wrapper)일 뿐입니다. 멀티플레이어 구현 방식은 제작하려는 게임에 따라 달라질 수 있으므로 여기서는 깊게 다루지 않겠습니다. 그런 다음 로비를 위한 오디오 콜 (audio call)을 시작합니다. >> 다음으로 중요한 부분은 오디오 콜백 (audio callbacks)과 함께 start call을 호출하는 것입니다.
로비에 입장하면, 로비 ID, 다른 플레이어로부터 오디오를 수신했을 때의 콜백, 그리고 로컬 마이크에서 오디오를 캡처했을 때의 콜백과 함께 이 메서드를 호출합니다. 만약 콜 (call)이 이미 존재한다면, 대신 해당 콜에 참여하게 됩니다. 또한 우리는 VAD (Voice Activity Detection) 임계값 (threshold)을 설정하는데, 이는 SDK가 오디오를 누군가의 음성으로 간주할 데시벨 (decibel) 수준을 제어합니다. 대상 범위는 -100에서 0 사이이며, 기본값은 -60입니다. 우리는 이를 -100으로 설정하고 있는데, 이는 거의 모든 오디오가 통과됨을 의미합니다. 이는 이번 구현에 적합하지만, 배경 소음을 더 많이 차단하고 싶다면 0에 가깝게 조정할 수 있습니다.
통화 종료(End call)는 간단합니다. 활성화된 통화가 없다면 아무것도 하지 않습니다. 통화 중이라면 로비 ID(lobby ID)와 함께 client.end call을 호출합니다. 콜백(callback)이 있지만, 여기서는 아무것도 할 필요가 없습니다. >> 이제 가장 중요한 작업이 이루어지는 사용자 오디오 수신 콜백(user audio received callback)에 대해 알아보겠습니다. 이 콜백은 모든 플레이어에게 Social SDK를 통해 오디오가 들어올 때마다 발생합니다. 근접 음성 채팅(proximity voice chat)의 핵심 파라미터는 out should mute입니다. 기본값은 false이며, 이는 마치 Discord 음성 통화에 함께 있는 것처럼 모든 사람의 소리가 들린다는 것을 의미합니다.
하지만 out should mute를 true로 설정하면 각 플레이어의 오디오 스트림(audio stream)에 어떤 일이 일어날지 제어할 수 있습니다. 여기서는 이를 true로 설정하고, 각 플레이어의 오디오 소스(audio source)를 ID 순으로 정렬된 딕셔너리(dictionary)에 저장했습니다. 해당 플레이어의 오디오 소스를 찾아 오디오를 직접 전달합니다. 플레이어의 오디오 데이터를 가져와 처리한 뒤 오디오 소스에 전달하는 래퍼 스크립트(wrapper script)를 사용합니다. 각 오디오 소스의 공간 혼합(spatial blend)은 1로 설정되어 있어, 해당 플레이어의 목소리가 원격 플레이어(remote player) 오브젝트에서 직접 나오는 것처럼 들리게 합니다.
플레이어가 움직임에 따라 Unity의 오디오 시스템이 감쇠(fall off)와 공간 오디오(spatial audio)를 적절히 처리합니다. Discord Social SDK와 Unity의 조합이 근접 음성 채팅을 가능하게 합니다. >> 실제로 작동하는 모습을 보겠습니다. >> 제가 방금 근접 오디오를 넣어 만든 게임을 확인해 보세요. >> 오, 멋진데요. 네, 어떻게 작동하는지 봅시다. [음악] >> 네. 어, 여기서 나눠서 가죠. 당신은 오른쪽으로 가고, 저는 왼쪽으로 갈게요. 그리고 들어보면 >> 오, 친구, 소리가 정말 점점 작아지네요. 진짜 멋져요. >> 그렇죠? 어, 해골이 있어요. >> 헤이, 제가 보물을 찾았어요.
정말 멋지네요. >> [웃음] >> Discord는 로비(lobbies), 초대(invites), 음성 채팅(voice chat)을 처리하고, Unity는 공간 오디오(spatial audio)를 처리합니다. 둘 다 각자 가장 잘하는 일을 수행하는 것입니다. >> [음악]
AI 자동 생성 콘텐츠
본 콘텐츠는 YouTube Unity 공식의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기