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

컬링 데모

PUN 패키지에 있는 RPGMovement 데모에 네트워크 컬링을 추가하는 방법에 대한 튜토리얼입니다. 우선 네트워크 컬링이 무엇이고 이것을 사용하는 이유에 대해서 알아보겠습니다.

가설: 씬에 두 명의 활성 플레이어가 있습니다. 한 플레이어는 지도의 왼쪽 상단에 있고, 다른 플레이어는 지도의 오른쪽 하단에 있습니다. 따라서 두 선수 사이의 거리는 최대로 멀리 떨어져 있습니다. 또한 지도 중간에는 장애물이 있어 서로를 볼 수 없습니다. 이 때문에 첫 번째 플레이어는 두 번째 플레이어가 현재 무엇을 하고 있는지 알 필요가 없으며 반대편도 그렇습니다. 이것은 네트워크 컬링으로 이어집니다. 네트워크 컬링은 관심 그룹을 사용하여 네트워크를 통해 전송되는 메시지의 양을 줄입니다. 이 솔루션을 사용하면 플레이어는 현재 관심이 있는 몇 개의 그룹만을 구독하여 그 그룹들과만 메시지를 주고 받습니다.

시작하기

유니티를 시작한 이후에 첫 번째로 할 것은 유니티 에셋 스토어에서 PUN 최신 패키지를 다운로드하고 파일을 임포트 하는 것 입니다. 네트워크 컬링 기능을 추가해야 하기때문에 RPGMovement 데모는 선택해야 하며 이 이외의 데모들은 체크하지 않아도 지장은 없습니다. 임포트가 완료되면 Photon Unity Networking > Demos > DemoRPGMovement 로 이동하여 이 폴더내의 씬을 오픈합니다.

계층구조를 살펴보고 파란색으로 써진 Robot Kyle RPG를 찾습니다. 만약 있다면 제거할 필요가 있습니다. 제거하지 않으면 나중에 수 많은 예외들이 발생할 수 있습니다. 네트워크 컬링에 사용되는 그리드를 설정하겠습니다. 계층구조를 다시 한번 잘 보고 Terrain 게임오브젝트를 찾아보세요. Terrain 게임오브젝트를 우클릭후에 create empty를 선택하세요. 이렇게하면 Terrain의 자식으로 새로운 빈 게임오브젝트가 생성됩니다. 원하는 것으로 이름을 변경하고, 이 튜토리얼에서는 CullArea 으로 이름을 변경하겠습니다. CullArea 게임오브젝트를 선택하고, 인스펙터내의 Add Component 버튼을 클릭합니다. Cull Area를 찾아 게임오브젝트에 추가하세요. 스크립트는 게임 오브젝트의 인스펙터로 드래그앤드롭할 수도 있습니다. Photon Unity Networking > UtilityScripts 에도 있습니다. 컴포넌트에서 제공되는 옵션들을 더 자세히 살펴보도록 하겠습니다.

월드 설정하기

먼저 컴포넌트는 프로젝트의 게임 유형을 선택할 수 있도록 합니다. 더 자세히 설명하면 컬링 영역의 상단 축을 설정합니다. 가로 스크롤 게임을 할 때는 Side Scroller Mode 를 선택하고, 그렇지 않고 탑-다운 또는 풀 3D 관점(1일칭, 3인칭…) 게임에서는 Top Down Or 3D Mode 를 선택합니다. RPGMovement 데모로 작업중이므로 Top Down Or 3D Mode 옵션을 선택합니다.

다음단계는 컬링 영역의 차원을 설정하는 것 입니다. 따라서 게임 오브젝트의 스케일링을 증가시켜 트랜스폼 컴포넌트를 간단히 변경합니다. RPGMovement 데모에서는 스케일링은 x-z-axis에 대해 100 으로 설정되어야 합니다. 씬 윈도우를 자세히 살펴보면 컬링 영역의 외곽선이 있는 붉은색 스퀘어가 표시되어 있는 것을 볼 수 있습니다. 또한 스퀘어가 옮겨져서 트랜스폼 컴포넌트의 x-z-coordinates 를 변경하여 위치를 조정해야 할 필요가 있다는 것을 보실 것 입니다. 두 값을 50 으로 설정합니다. 테두리가 이제 데모의 지도내에 맞아야 할 것 입니다.

Screenshot of the transform component
트랜스폼 컴포넌트는 이것과 같이 보여야 합니다

Note: When using Unity 4 the grid possibly might be displaced when taking a look at the game view when having Gizmos activated. You can - more or less - fix that by using ‘Free Aspect’ instead of any other fixed aspect ratio in the game view. 노트: 유니티 4를 사용할 때 그리드는 기즈모가 활성화 될 때 게임 뷰를 자세히 보면 그리드의 위치가 이동될 수도 있습니다.

CullArea 컴포넌트에서 제공하고 있는 다른 옵션들을 살펴보도록 하겠습니다. 지금까지는 네트워크 컬링의 가능성이 전혀 없는 단일의 큰 영역만이 있었습니다. 따라서 다음단계는 지도위에 필요한 하위 디비전 갯수를 정의하는 것 입니다. RPGMovement 데모에서는 number of subdivisions2 로 설정하면 좋습니다. 이 값을 변경하게되면 추가적으로 더 많은 옵션이 나타나거나 사라지는 것을 알 수 있을 것 입니다. 이 새로운 옵션은 각 하위 디비전에 필요한 행과 열의 갯수를 정하도록 해줍니다. 이 튜토리얼에서는 첫 번째 하위 디비전에 rowcolumn count 을 모두 3 으로 설정합니다. 지금 씬 뷰를 보면 빨간색 스퀘어가 아홉개의 더 작은 녹색 사각형으로 분리되어 있으며 각각의 네개의 더 작은 파란색 스퀘어로 되어 있는 것을 볼 수 있습니다.

Screenshot of the cull area component
컬 영역 컴포넌트는 이것과 같이 보여야 합니다.

노트: 하위 디비전의 최대값은 3으로 제한되어 있습니다. 설정될 수 있는 생성되는 셀 개수의 최대 값은 249로 제한되어 있습니다. 더 많은 셀을 생성하려고 시도하면 에디터 콘솔에 예외가 표시될 것 입니다.

마지막 두 개의 옵션은 씬과 게임뷰 조정을 위한 것 입니다. automatically align the editor view with the grid 옵션을 체크할 때, 씬 뷰는 컬 영역의 위치와 크기를 갱신할 때마다 매번 바뀌게 됩니다. 생성된 레벨과 컬 영역의 외곽선을 맞추려고 할 때 매우 도움이 될 것 입니다. Align main camera with grid는 가로-스크롤 또는 탑-다운 게임 테스트를 할 때 사용되는 것으로 메인 카메라와 그리드를 맞춥니다. 이 옵션은 수작업으로 테스트시에 메인 카메라를 조정할 필요가 없기 때문에 작업을 쉽게 할 수 있습니다. 메인 카메라 조정은 언두될 수 있습니다.

Screenshot of the grid
에디터 뷰를 잘 설정했을 때 다음과 같이 보이게 됩니다.

플레이어 설정

방금 환경 구성을 마쳤고 다음 단계에서는 플레이어를 설정해야 합니다. 따라서 Photon Unity Networking > Demos > DemoRPGMovement > Resources 으로 이동하고 Robot Kyle RPG 프리팹을 선택합니다. 인스펙터에서 Add Component 를 선택하고 목록에서 Network Culling Handler 를 선택합니다. 이 컴포넌트는 자동적으로 전에 조정해 놓았던 Cull Area 레퍼런스를 찾고 규칙적으로 체크합니다. 이 레퍼런스는 클라이언트가 구독 또는 구독해제할 관심 그룹입니다. 아무것도 환경구성을 할 필요가 없기 때문에 플레이어와 전체적인 설정이 완료되었습니다.

Back To Top

테스팅

네트워크 컬링구성을 마쳤고 지금 몇 가지 테스트를 할 수 있습니다. 테스트하려면 같은 룸에 연결된 최소 두 개의 클라이언트가 필요합니다. 유니티에서 File > Build & Run 으로 이동하세요. 유니티는 프로세스가 완료되면 자동으로 시작되는 스탠드얼론 클라이언트를 생성합니다. 테스트를 위해 생성 된 실행 파일을 여러 번 실행하거나 에디터에서 재생 버튼을 누르십시오. 두 명 이상의 클라이언트가 로드되어 동일한 방에 연결되어 있고 플레이어 캐릭터가 생성되고 제어 가능한 경우 이중 하나의 플레이어를 움직이며 이 클라이언트가 아닌 다른 클라이언트의 윈도우를 보면서 움직임을 살펴봅니다. 두 플레이어 간의 거리가 멀수록 움직임이 더 느려집니다. 이것은 네트워크를 통해 전송 된 업데이트 수가 대폭 감소했기 때문입니다. 이와는 반대로 두 플레이어 사이의 거리가 가까워지면 더 많은 정보가 전송되기 때문에 이동이 더 정확하고 덜 느려지게 될 것입니다.

네트워크 컬링에 대한 가능성을 설명으로 작성된 것임을 생각해주세요. 상용에서 네트워크 컬링을 사용할때는 주어진 기본사항을 개선하고 확장해야 할 필요가 있을 것 입니다.

기술문서 TOP으로 돌아가기