PUN Classic (also called PUN1) is the original and first major version of PUN. It is now replaced by PUN2 which is refactored and enhanced. We highly recommend starting new projects with PUN2 and if possible migrating existing ones from PUN1 to PUN2 by following our "Migration Notes". PUN Classic will be maintained for the coming months. We will fix important bugs and support new Unity versions but new features will be added only to PUN2.

관심 그룹

Photon의 "관심 그룹"은 룸 안에서의 대화에 대한 하위 채널로 생각할 수 있습니다: 클라이언트들은 구독중인 관심그룹의 메시지만 받습니다(그리고 그룹 0). 클라이언트들은 원하는 어떤 그룹에서 모든 이벤트를 전송할 수 있습니다.

이 간단한 기능은 기본 관심 관리 또는 부합한 방식 어디에서도 사용 할 수 있습니다. 아래의 유즈케이스 예제를 확인해보시기 바랍니다.

사용가능 그룹

클라이언트는 명시적으로 관심 그룹을 생성할 필요는 없습니다. 관심 그룹은 필요시에 생성됩니다. 즉, 액터가 새로운 그룹 멤버로 구독했을 때, 서버가 관심그룹을 생성할 것 입니다.

Photon은 최대 256개의 관심 그룹을 제공합니다. 그룹 번호 0은 예약된 것으로 브로드캐스팅을 의미합니다: 룸 내부에 있는 모든 액터들(클라이언트들)은 그룹 0을 구독하며 구독해제를 할 수는 없습니다. 나머지 255개 그룹은 자유롭게 개발자가 사용할 수 있습니다. 그룹 > 0에 지정된 모든 이벤트는 서버가 이벤트를 전달 할 때 룸 내의 그룹에 관심을 가지고 있는 클라이언트들에게만 전송됩니다.

중요: 관심 그룹 0으로 보낸 이벤트만 캐시 할 수 있습니다! 다른 그룹에는 이벤트 캐시가 없습니다.

Back To Top

전역 설정

가입된 그룹의 목록은 룸 안에서 언제든지 다음을 사용하여 번호를 추가하거나 제거하여 갱신 할 수 있습니다:

Back To Top

SetInterestGroups

SetInterestGroups는 클라이언트가 관심을 가지고 있는 그룹이 무엇인지를 알려줍니다. 기본값으로, 이것은 그룹 0이므로, 이것의 사용을 원하는 경우, 일부 그룹들을 구독해야합니다.

클라이언트가 이벤트 수신 하는 관심그룹을 전역적으로 필터링하려면:

void PhotonNetwork.SetInterestGroups(byte[] disableGroups, byte[] enableGroups)

대량 갱신을 사용하는 것을 선호해야 하지만, 개별 관심 그룹들의 수신을 토글 할 수도 있습니다:

void PhotonNetwork.SetInterestGroups(byte group, bool enabled)

Back To Top

SetSendingEnabled

SetSendingEnabled 를 사용할 때, 클라이언트는 특정 그룹으로 가는 갱신을 지역적으로 버릴 수 있습니다 - 이 갱신들은 절대 서버에 도달하지 않습니다 (이에 대한 서버측 로직은 없습니다).

클라이언트가 이벤트를 전송 해야하는 관심 그룹을 전역적으로 정의하려면 다음을 사용하세요:

void PhotonNetwork.SetSendingEnabled(byte[] disableGroups, byte[] enableGroups)

단일 전송 관심 그룹을 토글하기 위해서는:

void PhotonNetwork.SetSendingEnabled(byte group, bool enabled)

기본적으로, 클라이언트는 모든 그룹에게 갱신 내용을 전송하며 원하는 대로 할 수 있습니다.

노트:

  • 그룹 추가가 항상 우선 순위 입니다: 동일한 그룹 번호가 enableGroupsdisableGroups 배열 모두 추가된 경우 그룹이 추가될 것 입니다.
  • null 배열은 "그룹 없음" 으로 행동하며 빈 배열(new byte[0])은 "모든 그룹"으로 행동합니다.
  • PhotonNetwork.SetInterestGroups(new byte[0], enableGroups)enableGroups내에 있는 것들을 제외한 모든 그룹을 제거할 것 입니다.
  • PhotonNetwork.SetInterestGroups(disableGroups, new byte[0])disableGroups 값에 관계 없이 현재 존재하고 있는(사용된) 모든 그룹을 추가할 것 입니다.

Back To Top

사용 가이드

인스턴스화

PhotonNetwork.Instantiate 메소드는 그룹 파라미터를 받으며, 프리팹에 어태치된 PhotonView의 관심그룹을 설정할 것 입니다.

중요: PhotonNetwork.Instantiate로 기본값 0 이외의 group을 전달하면, 그 이전 그룹으로 부터 이벤트 수신을 사용하는지 확인해주세요. 그렇지 않으면, 프리팹은 지역적으로 인스턴스화 되지 않을 것 입니다.

Back To Top

PhotonView

프리팹에 어태치된 PhotonView들은 PhotonNetwork.Instantiate 호출로 전달된 관심 그룹을 자동적으로 얻게 될 것 입니다. 기본값으로 이것은 0입니다. 0이 아닌 경우에 참여하는 클라이언트들은 groups != 0 이것에 대해 인스턴스화를 실행하지 않을 것입니다.

PhotonView의 관심 그룹을 다음과 같은 코드를 통해 설정하거나 변경할 수 있습니다:

photonView.group = interestGroupCode;

뷰의 그룹을 설정하는 것은 로컬에서만 이루어집니다 - 원격 인스턴스들은 GameObject 인스턴스화 할 때 설정된 그룹을 유지하고 있습니다.

PunRPC와 PhotonView 직렬화/동기화 이벤트들은 SetSendingEnabled를 사용하여 사용불가로 하지 않는 한 각각의 PhotonView에 대해 설정된 관심 그룹에게만으로 전송될 것 입니다. 따라서 일반적으로 갱신사항들은 수신 클라이언트의 SetInterestGroup 설정으로 서버측에서 필터링 될 수 있습니다.

Back To Top

RaiseEvent

PhotonNetwork.RaiseEvent를 호출할 때 대상 관심 그룹을 설정하기 위해서 RaiseEventOptions.InterestGroup을 사용하세요.

Back To Top

유즈 케이스 예제

관심 그룹들은 룸 안에서 초당 메시지 갯수가 낮을 때 유용합니다. 메시지/초 한도를 낮게 유지하여 트래픽 양을 적게 함으로써, 비용 절감과 때로는 룸별로 최대 플레이어 수를 증가하는 데 도움을 줄 수 있습니다.

그러나 게임에서 관심 분야 그룹을 사용하는 다른 현명한 방법을 찾아 볼 수 있습니다.

Back To Top

네트워크 컬링

가장 일반적인 관심 그룹의 유즈 케이스는 네트워크 컬링 입니다. 관심 그룹은 게임내의 관심 지역과 매핑될 수 있습니다. 예를들어, "아주 큰 뚱보 세계"가 있다면 작은 부분으로 분리 할 수 있을 것이고 이것을 지역이라고 가정하면, 지역별로 그룹을 지정할 수 있습니다.

"컬링 데모" 는 관심 그룹을 필요로 합니다.

Back To Top

팀 이벤트

게임내에서 팀이 있고 팀 배타적인 이벤트가 필요한 경우, 팀별로 관심 그룹을 지정할 수 있습니다. 모든 팀 멤버들은 팀의 관심 그룹을 구독해야 합니다. 내부 팀 이벤트들은 팀 자체 그룹 번호를 사용하여 전송되어야 합니다. 외부 팀 이벤트들은 상대 팀의 그룹 번호를 사용하여 전송되어야 합니다.

To Document Top