컬링 데모
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 으로 설정합니다. 테두리가 이제 데모의 지도내에 맞아야 할 것 입니다.
CullArea 컴포넌트에서 제공하고 있는 다른 옵션들을 살펴보도록 하겠습니다. 지금까지는 네트워크 컬링의 가능성이 전혀 없는 단일의 큰 영역만이 있었습니다. 따라서 다음단계는 지도위에 필요한 하위 디비전 갯수를 정의하는 것 입니다. RPGMovement 데모에서는 number of subdivisions 을 2 로 설정하면 좋습니다. 이 값을 변경하게되면 추가적으로 더 많은 옵션이 나타나거나 사라지는 것을 알 수 있을 것 입니다. 이 새로운 옵션은 각 하위 디비전에 필요한 행과 열의 갯수를 정하도록 해줍니다. 이 튜토리얼에서는 첫 번째 하위 디비전에 row 와 column count 을 모두 3 으로 설정합니다. 지금 씬 뷰를 보면 빨간색 스퀘어가 아홉개의 더 작은 녹색 사각형으로 분리되어 있으며 각각의 네개의 더 작은 파란색 스퀘어로 되어 있는 것을 볼 수 있습니다.
마지막 두 개의 옵션은 씬과 게임뷰 조정을 위한 것 입니다. automatically align the editor view with the grid 옵션을 체크할 때, 씬 뷰는 컬 영역의 위치와 크기를 갱신할 때마다 매번 바뀌게 됩니다. 생성된 레벨과 컬 영역의 외곽선을 맞추려고 할 때 매우 도움이 될 것 입니다. Align main camera with grid는 가로-스크롤 또는 탑-다운 게임 테스트를 할 때 사용되는 것으로 메인 카메라와 그리드를 맞춥니다. 이 옵션은 수작업으로 테스트시에 메인 카메라를 조정할 필요가 없기 때문에 작업을 쉽게 할 수 있습니다. 메인 카메라 조정은 언두될 수 있습니다.
플레이어 설정
방금 환경 구성을 마쳤고 다음 단계에서는 플레이어를 설정해야 합니다. 따라서 Photon Unity Networking > Demos > DemoRPGMovement > Resources 으로 이동하고 Robot Kyle RPG 프리팹을 선택합니다. 인스펙터에서 Add Component 를 선택하고 목록에서 Network Culling Handler 를 선택합니다. 이 컴포넌트는 자동적으로 전에 조정해 놓았던 Cull Area 레퍼런스를 찾고 규칙적으로 체크합니다. 이 레퍼런스는 클라이언트가 구독 또는 구독해제할 관심 그룹입니다. 아무것도 환경구성을 할 필요가 없기 때문에 플레이어와 전체적인 설정이 완료되었습니다.
테스팅
네트워크 컬링구성을 마쳤고 지금 몇 가지 테스트를 할 수 있습니다. 테스트하려면 같은 룸에 연결된 최소 두 개의 클라이언트가 필요합니다. 유니티에서 File > Build & Run 으로 이동하세요. 유니티는 프로세스가 완료되면 자동으로 시작되는 스탠드얼론 클라이언트를 생성합니다. 테스트를 위해 생성 된 실행 파일을 여러 번 실행하거나 에디터에서 재생 버튼을 누르십시오. 두 명 이상의 클라이언트가 로드되어 동일한 방에 연결되어 있고 플레이어 캐릭터가 생성되고 제어 가능한 경우 이중 하나의 플레이어를 움직이며 이 클라이언트가 아닌 다른 클라이언트의 윈도우를 보면서 움직임을 살펴봅니다. 두 플레이어 간의 거리가 멀수록 움직임이 더 느려집니다. 이것은 네트워크를 통해 전송 된 업데이트 수가 대폭 감소했기 때문입니다. 이와는 반대로 두 플레이어 사이의 거리가 가까워지면 더 많은 정보가 전송되기 때문에 이동이 더 정확하고 덜 느려지게 될 것입니다.