관심 그룹
Photon의 "관심 그룹"은 룸 안에서의 대화에 대한 하위 채널로 생각할 수 있습니다:
클라이언트들은 구독중인 관심그룹의 메시지만 받습니다(그리고 그룹 0).
클라이언트들은 원하는 어떤 그룹에서 모든 이벤트를 전송할 수 있습니다.
이 간단한 기능은 기본 관심 관리 또는 부합한 방식 어디에서도 사용 할 수 있습니다.
아래의 유즈케이스 예제를 확인해보시기 바랍니다.
사용가능 그룹
클라이언트는 명시적으로 관심 그룹을 생성할 필요는 없습니다.
관심 그룹은 필요시에 생성됩니다. 즉, 액터가 새로운 그룹 멤버로 구독했을 때, 서버가 관심그룹을 생성할 것 입니다.
Photon은 최대 256개의 관심 그룹을 제공합니다.
그룹 번호 0은 예약된 것으로 브로드캐스팅을 의미합니다: 룸 내부에 있는 모든 액터들(클라이언트들)은 그룹 0을 구독하며 구독해제를 할 수는 없습니다.
나머지 255개 그룹은 자유롭게 개발자가 사용할 수 있습니다.
그룹 > 0에 지정된 모든 이벤트는 서버가 이벤트를 전달 할 때 룸 내의 그룹에 관심을 가지고 있는 클라이언트들에게만 전송됩니다.
전역 설정
가입된 그룹의 목록은 룸 안에서 언제든지 다음을 사용하여 번호를 추가하거나 제거하여 갱신 할 수 있습니다:
SetInterestGroups
SetInterestGroups
는 클라이언트가 관심을 가지고 있는 그룹이 무엇인지를 알려줍니다.
기본값으로, 이것은 그룹 0이므로, 이것의 사용을 원하는 경우, 일부 그룹들을 구독해야합니다.
클라이언트가 이벤트 수신 하는 관심그룹을 전역적으로 필터링하려면:
C#
void PhotonNetwork.SetInterestGroups(byte[] disableGroups, byte[] enableGroups)
대량 갱신을 사용하는 것을 선호해야 하지만, 개별 관심 그룹들의 수신을 토글 할 수도 있습니다:
C#
void PhotonNetwork.SetInterestGroups(byte group, bool enabled)
SetSendingEnabled
SetSendingEnabled
를 사용할 때, 클라이언트는 특정 그룹으로 가는 갱신을 지역적으로 버릴 수 있습니다 - 이 갱신들은 절대 서버에 도달하지 않습니다 (이에 대한 서버측 로직은 없습니다).
클라이언트가 이벤트를 전송 해야하는 관심 그룹을 전역적으로 정의하려면 다음을 사용하세요:
C#
void PhotonNetwork.SetSendingEnabled(byte[] disableGroups, byte[] enableGroups)
단일 전송 관심 그룹을 토글하기 위해서는:
C#
void PhotonNetwork.SetSendingEnabled(byte group, bool enabled)
기본적으로, 클라이언트는 모든 그룹에게 갱신 내용을 전송하며 원하는 대로 할 수 있습니다.
노트:
- 그룹 추가가 항상 우선 순위 입니다: 동일한 그룹 번호가
enableGroups
과disableGroups
배열 모두 추가된 경우 그룹이 추가될 것 입니다. null
배열은 "그룹 없음" 으로 행동하며 빈 배열(new byte[0]
)은 "모든 그룹"으로 행동합니다.PhotonNetwork.SetInterestGroups(new byte[0], enableGroups)
은enableGroups
내에 있는 것들을 제외한 모든 그룹을 제거할 것 입니다.PhotonNetwork.SetInterestGroups(disableGroups, new byte[0])
은disableGroups
값에 관계 없이 현재 존재하고 있는(사용된) 모든 그룹을 추가할 것 입니다.
사용 가이드
인스턴스화
PhotonNetwork.Instantiate
메소드는 그룹
파라미터를 받으며, 프리팹에 어태치된 PhotonView의 관심그룹을 설정할 것 입니다.
PhotonNetwork.Instantiate
로 기본값 0 이외의 group
을 전달하면, 그 이전 그룹으로 부터 이벤트 수신을 사용하는지 확인해주세요.
그렇지 않으면, 프리팹은 지역적으로 인스턴스화 되지 않을 것 입니다.
PhotonView
프리팹에 어태치된 PhotonView들은 PhotonNetwork.Instantiate
호출로 전달된 관심 그룹을 자동적으로 얻게 될 것 입니다.
기본값으로 이것은 0입니다. 0이 아닌 경우에 참여하는 클라이언트들은 groups != 0 이것에 대해 인스턴스화를 실행하지 않을 것입니다.
PhotonView의 관심 그룹을 다음과 같은 코드를 통해 설정하거나 변경할 수 있습니다:
C#
photonView.group = interestGroupCode;
뷰의 그룹을 설정하는 것은 로컬에서만 이루어집니다 - 원격 인스턴스들은 GameObject 인스턴스화 할 때 설정된 그룹을 유지하고 있습니다.
PunRPC와 PhotonView 직렬화/동기화 이벤트들은 SetSendingEnabled
를 사용하여 사용불가로 하지 않는 한 각각의 PhotonView에 대해 설정된 관심 그룹에게만으로 전송될 것 입니다. 따라서 일반적으로 갱신사항들은 수신 클라이언트의 SetInterestGroup 설정으로 서버측에서 필터링 될 수 있습니다.
RaiseEvent
PhotonNetwork.RaiseEvent
를 호출할 때 대상 관심 그룹을 설정하기 위해서 RaiseEventOptions.InterestGroup
을 사용하세요.
유즈 케이스 예제
관심 그룹들은 룸 안에서 초당 메시지 갯수가 낮을 때 유용합니다.
메시지/초 한도를 낮게 유지하여 트래픽 양을 적게 함으로써, 비용 절감과 때로는 룸별로 최대 플레이어 수를 증가하는 데 도움을 줄 수 있습니다.
그러나 게임에서 관심 분야 그룹을 사용하는 다른 현명한 방법을 찾아 볼 수 있습니다.
네트워크 컬링
가장 일반적인 관심 그룹의 유즈 케이스는 네트워크 컬링 입니다.
관심 그룹은 게임내의 관심 지역과 매핑될 수 있습니다.
예를들어, "아주 큰 뚱보 세계"가 있다면 작은 부분으로 분리 할 수 있을 것이고 이것을 지역이라고 가정하면, 지역별로 그룹을 지정할 수 있습니다.
"컬링 데모" 는 관심 그룹을 필요로 합니다.
팀 이벤트
게임내에서 팀이 있고 팀 배타적인 이벤트가 필요한 경우, 팀별로 관심 그룹을 지정할 수 있습니다.
모든 팀 멤버들은 팀의 관심 그룹을 구독해야 합니다.
내부 팀 이벤트들은 팀 자체 그룹 번호를 사용하여 전송되어야 합니다.
외부 팀 이벤트들은 상대 팀의 그룹 번호를 사용하여 전송되어야 합니다.