DEV Community

Cover image for Unity 게임에 친구 목록을 추가하는 방법

Unity 게임에 친구 목록을 추가하는 방법

Unity 게임에 친구 목록을 통합하는 것은 플레이어 참여를 촉진하는 데 있어 핵심적인 요소입니다. 이를 통해 플레이어는 게임 외부의 친구이든, 치열한 대전 중에 친분을 쌓은 플레이어이든 게임 내에서 다른 플레이어와 더 긴밀한 관계를 형성할 수 있습니다.

친구 목록은 매력적인 커뮤니티를 만드는 데 필수적인 기능이지만, Unity 프로젝트에 이러한 기능을 통합하는 것은 말처럼 쉬운 일이 아닙니다. 처음부터 시작하려면 플레이어가 늘어날 때 이를 구축하고, 유지 관리하고, 확장하는 데 많은 리소스가 필요합니다. 다행히도 PubNub에서는 지연 시간이 짧은 실시간 API 플랫폼을 통해 그 어느 때보다 쉽게 Unity 게임에 실시간 기능을 추가할 수 있습니다. 유니티는 앱의 인프라 계층을 관리하므로 개발자는 애플리케이션에만 집중할 수 있습니다. Windows, Mac, iOS, Android, Oculus 및 Meta Quest와 같은 가상 현실 시스템 또는 크로스 플랫폼용 개발이든, 유니티 SDK는 모든 것을 지원합니다.

이 가이드를 따라할 때 참고할 수 있도록 Unity 게임에서 친구 목록을 구현하는 방법의 예시를 보고 싶다면 Unity 쇼케이스 게임을 확인해 보세요.

계속 읽으면서 Unity 게임에 친구 목록을 추가하여 친구를 추가, 삭제하고 친구의 온라인 상태를 실시간으로 확인하는 방법을 단계별로 알아보세요. 이 가이드에서는 친구 목록 추가에 대해 설명하지만, 동일한 아키텍처를 길드, 클랜, 동맹 목록에도 쉽게 적용할 수 있습니다. 먼저 PubNub 게임 오브젝트를 구성하는 방법과 채널 그룹이 친구 목록을 설계하는 방법을 이해하고, 마지막으로 친구 시스템 구현에 대해 알아볼 것입니다.

PubNub 시작하기

Unity 게임의 스코어보드와 리더보드를 설정하는 방법을 이해하려면 먼저 PubNub에 대해 이해하고 플랫폼의 기능을 활용하도록 애플리케이션을 구성하는 방법을 알아야 합니다.

개요

PubNub는 Pub/Sub(게시/구독) 모델을 기반으로 합니다. 사용자는 기본적으로 모든 관련 정보가 포함된 페이로드인 메시지를 PubNub 네트워크에 게시합니다. 메시지 및 기타 생성된 이벤트를 수신하거나 듣고자 하는 사용자는 PubNub 네트워크에 가입하고 메시지를 파싱합니다. 이벤트 리스너는 PubNub 네트워크에서 생성된 메시지와 이벤트를 포착하고 발생한 동작에 따라 트리거하는 데 사용됩니다.

메시지가 올바른 수신자에게 전달되도록 하기 위해 채널은 데이터가 한 장치에서 다른 장치로 전송되는 메커니즘으로 사용됩니다. 채널은 디바이스가 PubNub 네트워크에 메시지를 게시하고 구독하고자 할 때마다 필요합니다. 사용자는 한 번에 하나의 메시지만 게시할 수 있지만, 한 번에 여러 개의 채널을 구독할 수 있습니다.

PubNub Unity SDK 설치 및 구성하기

시작하려면 PubNub 종속 요소를 설치하고 애플리케이션을 PubNub 네트워크에 연결하도록 PubNub Unity SDK를 구성해야 합니다. 이 가이드에서는 Unity 게임 엔진, Unity 에셋, Visual Studio와 같은 코드 에디터가 이미 설치되어 있다고 가정합니다. 자세한 내용은 Unity SDK 설명서를 참조하시기 바라며, 개략적인 내용은 다음과 같습니다:

  1. 패키지 관리자를 통해 Unity 패키지를 추가합니다.
  2. 무료 PubNub 계정을 생성하고 PubNub 키를 받습니다. 키 세트에서 애플리케이션에 필요한 기능을 활성화해야 합니다. 이 가이드에서는 프레즌스 및 스트림 컨트롤러를 기본 설정으로 활성화해야 합니다. 키 세트의 다양한 기능에 대한 자세한 내용은 가이드를 참조하세요.
  3. 새 Unity 프로젝트를 생성하거나 기존 게임을 열고 이전 단계에서 얻은 퍼블리시 및 구독 키를 Unity에 제공하여 Unity 에디터에서 PubNub 게임 오브젝트를 구성합니다. 또한 모든 PubNub 오브젝트에 고유 식별자가 있어야 PubNub에 연결할 수 있으므로 UserId를 제공해야 합니다. 이 작업을 완료했으면 PubNub 오브젝트를 초기화합니다:
using PubnubApi;
using PubnubApi.Unity;

PubNub pubnub = new Pubnub(pnConfiguration);
Enter fullscreen mode Exit fullscreen mode
  1. 게임이 메시지에 반응하도록 이벤트 리스너를 추가하면 백엔드에서 기본적으로 새 메시지가 수신될 때 알림을 받게 됩니다. 각 유형의 메시지 또는 이벤트에 응답하는 사용자 지정 로직을 구현할 수 있는 다양한 이벤트 리스너가 있지만, 이 가이드에서는 프레즌스 및 메시지 이벤트 리스너가 필요합니다:
var listener = new SubscribeCallbackListener();
pubnub.AddListener(listener);
listener.onPresence += OnPnPresence;
listener.onMessage += OnPnMessage;

// Handle Presence Events generated by the PubNub Network
private void OnPnPresence(Pubnub pn, PNPresenceEventResult result) {
    Debug.Log(result.Event);
}

// Handle Message Events generated by the PubNub Network.
private void OnPnMessage(Pubnub pn, PNMessageResult<object> result) {
    Debug.Log($"Message received: {result.Message}");
}
Enter fullscreen mode Exit fullscreen mode

프레즌스는 게임 내 플레이어의 온라인 및 사용자 지정 상태를 확인하는 데 사용되며, PubNub는 이벤트를 생성하여 실시간으로 플레이어의 상태에 대한 정보를 전달합니다. Unity 게임에 프레즌스 기능을 구현하는 방법에 대한 자세한 내용은 방법 가이드를 참조하세요.

친구 목록 설계

플레이어의 친구가 온라인 상태가 될 때마다 게임에서 알 수 있는 알림인 프레즌스 이벤트를 수신하려면 채널을 구독하는 것부터 시작해야 합니다. 하지만 플레이어는 어떤 플레이어가 자신의 친구인지 어떻게 알 수 있을까요? 채널 그룹은 이 문제에 대한 완벽한 솔루션입니다.

채널 그룹

채널 그룹 을 사용하면 한 번에 많은 수의 채널을 지속적으로 관리할 수 있습니다. 채널 그룹은 기본적으로 채널 목록에 대한 포인터로, 채널 그룹당 최대 2,000개의 채널에 대해 한 번의 구독 요청을 보낼 수 있습니다. 채널 그룹은 네트워크에 연결된 사용자 아이디에 고유하므로 채널 그룹에 고유한 이름을 지정하고 해당 플레이어와 연결할 수 있습니다.

즉, 사용자별로 고유한 채널을 구독할 필요 없이 채널 그룹을 구독하고 플레이어의 온라인 상태나 사용자 지정 상태가 변경될 때마다 프레즌스 및 기타 이벤트를 수신할 수 있습니다. 따라서 채널 그룹과 채널은 내가 관리하고 업데이트를 받을 수 있는 친구 및 회원(채널)의 목록(채널 그룹)이라고 생각하면 됩니다.

채널 그룹 설정하기

게임의 필요에 따라 각 플레이어의 친구 목록을 구현하려면 최소 두 개의 채널 그룹이 필요하며, 각 채널 그룹은 플레이어의 사용자 ID로 연결하여 고유하게 식별할 수 있습니다. 이름은 서로 다를 수 있으므로 채널 이름 지정 규칙 문서를 참조하세요:

//receive presence updates, so you know when a player’s friends online or custom status changes.
string chanGroupFriendsStatus = $friends_status_ + {UserID} ;

// receive chat messages from friends
string chanGroupFriendsChat = $friends_chat_ + {UserID};
Enter fullscreen mode Exit fullscreen mode

채팅 메시지와 같은 다른 이벤트에서 프레즌스 이벤트를 분리하려면 두 개의 채널 그룹이 필요합니다. 동일한 채널 그룹이 메시지와 채널을 모두 나타내면 불필요한 트래픽이 많이 발생할 수 있습니다. 이벤트를 최대한 분리하여 향후 더 많은 기능으로 게임을 유연하게 확장할 수 있도록 하려는 것입니다.

친구 채팅 구현에 관심이 없는 경우 상태 채널 그룹만 있으면 됩니다. 친구 채팅을 구현하려는 경우, 이 가이드는 게임의 채팅 시스템 설정이 아닌 친구 목록의 아키텍처를 따르고 있다는 점에 유의하시기 바랍니다. Unity에서 채팅 시스템을 구현하는 방법에 대한 자세한 내용은 실시간 채팅 가이드를 참조하세요.

모든 채널 그룹에는 연결된 채널이 하나 이상 필요합니다. 모든 플레이어에 대한 채널 패턴을 생성하고 플레이어의 사용자 ID를 채널 이름에 연결하는 방식으로 이 문제를 해결할 수 있습니다:

string chanFriendStatus = $friends.presence. + {UserID};
string chanFriendChat = $friends.chat. + {UserID};
Enter fullscreen mode Exit fullscreen mode

그런 다음 채널 그룹 API를 사용하여 이 두 채널을 적절한 채널 그룹에 추가합니다. 처음 로그인하는 각 플레이어에 대해 이 작업을 수행합니다:

PNResult<PNChannelGroupsAddChannelResult> statusFriendsResponse= await pubnub.AddChannelsToChannelGroup()
  .ChannelGroup(chanGroupFriendsStatus )
  .Channels(new string[] {
    chanFriendStatus
  })
  .ExecuteAsync();
//Handle response

PNResult<PNChannelGroupsAddChannelResult> chatFriendsResponse= await pubnub.AddChannelsToChannelGroup()
  .ChannelGroup(chanGroupFriendsChat)
  .Channels(new string[] {
    chanFriendChat 
  })
  .ExecuteAsync();
//Handle response
Enter fullscreen mode Exit fullscreen mode

이렇게 이름이 지정된 채널을 해당 채널 그룹에 추가하는 방법은 플레이어의 친구 목록에서 친구를 추가하고 삭제하는 방법과 동일하지만, 이에 대해서는 나중에 자세히 설명합니다.

현재 상태 및 메시지 이벤트 듣기: 구독하기

채널과 채널 그룹 시스템이 준비되었으면 이제 플레이어의 상태가 변경되어 온라인 상태가 될 때마다 프레즌스 이벤트를 생성하는 PubNub 네트워크를 구독할 수 있습니다.

채널 구독과 마찬가지로 채널 그룹을 직접 구독하고 해당 채널 그룹과 연결된 모든 채널에서 프레즌스 이벤트와 메시지 이벤트를 모두 받을 수 있습니다. 일반적으로 구독할 때 withPresence 파라미터를 포함하면 SDK가 프레즌스 채널과 비프레즌스 채널을 모두 관리하도록 처리할 수 있습니다(자세한 내용은 Unity의 프레즌스 사용법 가이드에서 확인할 수 있습니다). 하지만 채널에 대한 메시지, 메타데이터 업데이트 등의 다른 이벤트가 아닌 프레즌스 이벤트만 포착하기를 원하기 때문에 chanGroupFriendsStatus 채널 그룹에 대해서는 그렇게 하고 싶지 않습니다.

이 문제를 해결하려면 chanGroupFriendsStatus에 -pnpres를 추가하면 됩니다. 이렇게 하면 이 채널 그룹에 대한 모든 이벤트, 특히 프레즌스 이벤트가 앞서 설정한 프레즌스 이벤트 리스너에 의해 포착됩니다. 또한, 챈그룹프렌즈챗은 어떤 프레즌스 이벤트도 수신하지 않고 오직 메시지에만 집중하게 됩니다:

pubnub.Subscribe<string>()
  .ChannelGroups(new string[] {
    chanGroupFriendsStatus + -pnpres,
    chanGroupFriendsChat
  })
  .Execute();
Enter fullscreen mode Exit fullscreen mode

메시지 보내기에만 집중합니다: 게시

채널 그룹 chanGroupFriendsStatus를 사용할 준비가 되었으면, 친구가 메시지를 보낼 수 있도록 게시 호출을 설정하고 친구 채팅 채널 그룹에 연결된 모든 친구가 메시지를 받을 수 있도록 해야 합니다.

채널 그룹에 가입할 수는 있지만 채널 그룹에 게시할 수는 없습니다. 대신, 앞서 설정한 채널 그룹과 연결된 채널에 메시지를 게시해야 합니다:

PNResult<PNPublishResult> publishResponse = await pubnub.Publish()
  .Message(Hey friends, lets game?)
  .Channel(chanFriendChat)
  .ExecuteAsync();
  PNPublishResult publishResult = publishResponse.Result;
//Handle result
Enter fullscreen mode Exit fullscreen mode

채널 그룹에 직접 게시할 수는 없지만, 이 채널 그룹의 모든 채널에 메시지를 게시하면 클라이언트 수신자의 메시지 핸들러가 메시지를 받게 됩니다. 즉, 채널 그룹에 연결된 모든 친구가 메시지를 받게 됩니다.

초기 게임 로드

플레이어가 처음 로그인할 때 채널 목록 서비스를 호출하여 채널 그룹의 모든 채널 또는 친구를 나열해야 합니다:

PNResult<PNChannelGroupsAllChannelsResult> friendsListResult= await pubnub.ListChannelsForChannelGroup()
  .ChannelGroup(chanGroupFriendsStatus)
  .ExecuteAsync();
Enter fullscreen mode Exit fullscreen mode

이 친구 목록은 채널에서 사용자 ID를 추출할 수 있으므로(직접 패턴을 만들었으므로) 플레이어의 친구 목록 UI를 구성하는 데 사용할 수 있습니다. 이러한 플레이어와 관련된 메타데이터가 있는 경우 앱 컨텍스트 API와 함께 사용자 ID를 사용하여 닉네임, 프로필 사진, 플레이어에 대한 메모 등의 프로필 정보에 대한 메타데이터를 얻을 수 있습니다.

현재 온라인 상태를 확인하려면 HereNow를 호출하여 현재 온라인 상태인 모든 사용자를 검색하고 플레이어의 친구 목록과 상호 참조합니다:

pubnub.HereNow()
  .ChannelGroups(new String[]{ chanGroupFriendsStatus })
  .IncludeState(true)
  .IncludeUUIDs(true)
  .ExecuteAsync()
Enter fullscreen mode Exit fullscreen mode

그런 다음 친구 목록 UI의 온라인 상태 표시기를 업데이트하여 해당 친구들이 온라인 상태임을 표시할 수 있습니다. 앞서 설정한 프레즌스 이벤트 리스너는 온라인 상태 및 사용자 지정 상태 변경을 감지하며, 이에 따라 플레이어의 친구 목록 UI를 업데이트할 수 있습니다. 앞서 언급했듯이 메시지 이벤트 리스너에서도 메시지를 감지하여 친구 그룹에서 보낸 메시지임을 나타내는 고유한 색상으로 표시할 수 있습니다.

시스템에 친구 목록을 추가하기 위한 거의 모든 것이 구현되었지만 플레이어는 친구 목록을 어떻게 관리할까요?

친구 관리하기: 친구 시스템

앞서 설명한 것처럼 채널 그룹에 친구를 추가하려면 채널 추가 기능을 호출하여 채널 그룹에 채널을 추가할 수 있습니다. 이 기능은 플레이어가 버튼을 클릭하여 다른 친구를 추가하거나 다른 플레이어의 초대를 수락할 때 시작할 수 있습니다.

플레이어는 채널 제거 기능을 호출하고 채널 그룹과 채널을 지정하여 친구 그룹에서 친구를 제거할 수도 있습니다. 앞서 생성한 상태 및 채팅 채널 그룹 모두에 대해 이 과정을 반복해야 합니다. 이 호출을 시작하는 버튼에 사용자 아이디를 전달하고 앞서 만든 채널 패턴에 해당 아이디를 포함시켜 채널 그룹에서 친구를 제거할 수 있습니다.

게임 자체에서 친구 추가 및 제거를 모두 수행할 수 있지만, 플레이어가 게임 내에서 채널 그룹에 채널을 추가/제거할 수 없도록 하는 것이 좋습니다. 플레이어가 친구를 추가/제거하려면 백엔드 서버(사용자가 계정을 등록할 때와 동일한 서버일 수 있음)에 요청을 보내야 이러한 요청을 처리할 수 있습니다.

이는 게임의 보안을 강화하기 위한 것으로, 서로 친구가 아닌 플레이어가 특정 플레이어의 친구 그룹에 액세스하는 것을 원치 않기 때문입니다. 암호화 토큰 기반 권한 관리자인 액세스 관리자를 구현하면 클라이언트의 PubNub 리소스에 대한 액세스를 규제할 수 있습니다.

백엔드 서버에서 이 보안 제어 기능을 사용하면 특정 플레이어에 대한 친구 요청 초대를 수신하여 의도한 대상에게 요청을 전달하는 시스템을 구현할 수 있습니다. 플레이어는 요청을 수락하거나 거부하여 백엔드 서버(액세스 관리자를 통해 보호됨)를 통해 초대를 다시 보내고 원래 발신자에게 전달합니다. 이렇게 하면 플레이어의 친구 목록을 안전하게 관리할 수 있습니다.

다음 단계

이 사용법 가이드에서는 Unity 게임에 친구 목록을 추가하는 방법을 배웠습니다. 채널 그룹과 프레즌스를 사용하여 친구의 온라인/오프라인 및 커스텀 상태 변경 사항을 확인할 수 있는 시스템을 구현하고, 액세스 관리자로 권한을 확보하여 친구를 추가 및 제거할 수 있는 기반을 구축했습니다.

게임 개발자는 다음 리소스를 통해 자세히 알아볼 수 있습니다:

궁금한 점이 있으면 언제든지 개발자 지원팀( devrel@pubnub.com )으로 문의하세요.

펍넙은 어떤 도움을 드릴 수 있나요?

이 문서는 원래 PubNub.com에 게시되었습니다.

저희 플랫폼은 개발자가 웹 앱, 모바일 앱 및 IoT 디바이스를 위한 실시간 상호작용을 구축, 제공 및 관리할 수 있도록 지원합니다.

저희 플랫폼의 기반은 업계에서 가장 크고 확장성이 뛰어난 실시간 에지 메시징 네트워크입니다. 전 세계 15개 이상의 PoP가 월간 8억 명의 활성 사용자를 지원하고 99.999%의 안정성을 제공하므로 중단, 동시 접속자 수 제한 또는 트래픽 폭증으로 인한 지연 문제를 걱정할 필요가 없습니다.

PubNub 체험하기

라이브 투어를 통해 5분 이내에 모든 PubNub 기반 앱의 필수 개념을 이해하세요.

설정하기

PubNub 계정에 가입하여 PubNub 키에 무료로 즉시 액세스하세요.

시작하기

사용 사례나 SDK에 관계없이 PubNub 문서를 통해 바로 시작하고 실행할 수 있습니다.

Top comments (0)