PUN Classic(PUN1이라고도 불립니다)은 PUN의 첫 버전입니다.         현재는 리팩토링 및 기능 확장에 의해 PUN2로 새롭게 바뀌었습니다.          새 프로젝트에는 PUN2를 이용해 주시고, 기존의 프로젝트도 가능하면 PUN1에서 PUN2로 옮기는 것을 권장합니다.  자세한 내용은: "마이그레이션 노트". PUN Classic은 곧 점검이 시작됩니다.        중요한 버그의 수정과 Unity의 신버전의 지원 등을 예정하고 있습니다. 신기능의 추가는 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

팀 이벤트

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

기술문서 TOP으로 돌아가기