This document is about: PUN 2
SWITCH TO

PUN Classic (v1), PUN 2, Bolt는 휴업 모드입니다. Unity2022에 대해서는 PUN 2에서 서포트하지만, 신기능의 추가는 없습니다. 현재 이용중인 고객님의 PUN 및 Bolt 프로젝트는 중단되지 않고, 퍼포먼스나 성능이 떨어지는 일도 없습니다. 앞으로의 새로운 프로젝트에는 Photon Fusion 또는 Quantum을 사용해 주십시오.

0 - 소개

PUN 기본 튜토리얼은 유니티 기반의 튜토리얼 입니다. 이 자습서는 Photon Cloud를 사용한 멀티플레이어 가능 어플리케이션을 개발하고 애니메이션 처리를 위해 애니메이터를 이용한 캐릭터를 어떻게 사용하는 지에 대해 보여 줍니다. 진행 해 나가면서 PUN을 이용한 네트워크 기반 개발을 어떻게 하는지에 대한 개요를 파악하고 여러가지 중요한 기능들, 팁과 트릭들에 대해 학습 할 것 입니다.

개요

이 튜토리얼은 빈 프로젝트부터 시작하여 모든 생성 절차를 단계별로 안내 해 줄 것 입니다. 학습하는 동안 개념들과 자주 하는 실수 및 네트워크 게임 설계에 대한 고려사항들이 설명 될 것 입니다.

아무것도 하는것없이 걸어만 다니는 플레이어 보다는 우리는 플레이어 체력 관리를 하고있는 기본적인 발사 시스템을 구현 할 것이며 플레이어 체력 관리를 하고있는 기본적인 발사 시스템을 구현함으로써 이를 통해 네트워크 상에서 변수 동기화에 대한 이해를 쉽게 하실 수 있을 것 입니다.

룸내의 참여 플레이어 수에 따라 크기가 변하는 경기장을 사용할 것이며, 경기장의 크기는 현재 플레이 하고 있는 플레이어 수에 따라 조정 됩니다.

여기에서는 씬의 자동 동기화 기능에 대한 몇 가지 개념과 다른 씬으로 로딩할 때 플레이어들의 관리 팁들 그리고 이 시나리오에서 잘못 될 수 있는 것이 무엇 인지에 대해서 다루고 있습니다 :)

게임의 목적

게임이 실행 되었을 때 사용자는 연결 프로토콜과 UI에서 진행 상태를 볼 수 있을 것 입니다. 룸에 참여하거나 룸이 생성 되었을 때, 플레이어들이 크기가 조정되는 경기장에 입장하며 경기장은 한 번에 최대 4명의 플레이어까지 참여 할 수 있습니다. 플레이어는 달리고 회전할 수 있으며 발사도 할 수 있습니다. 플레이어는 빔을 쏘고 플레이어가 빔에 맞았을 때는 체력이 줄어 들게 됩니다. 체력이 0이 되었을 때 게임이 종료되고 경기장에서 떠나게 됩니다. 소개 화면으로 다시 표시되며 원하면 새로운 게임에 다시 참여할 수 있습니다.

알아야 할 것

이 튜토리얼에서는 유니티 에티터 사용법과 프로그래밍에 대해서 기본 지식이 있다고 가정합니다. 네트워크 게임이 아니더라도 일반적인 게임 제작 경험과 지식이 있으면 Photon 네트워크에서 다루는 새로운 개념에 집중 할 수 있을 것 입니다.

샘플 코드는 C#으로 작성되었습니다.

Photon Cloud

새로운 유니티 프로젝트 생성

Unity 버전이 5.3.7p4와 같거나 그 이상인지 확인해주십시오. 새로운 프로젝트를 생성하는 것이 이 튜토리얼을 따라하는데 권장됩니다. 개념과 디자인 패턴을 완전히 다 이해하였으면 나만의 프로젝트에 적용 하세요.

PUN 임포트 및 설정

에셋 스토어를 열고 PUN 2 에셋을 찾아 다운로드하고 인스톨 합니다. Unity가 모든 PUN 에셋을 임포트 한 후 재컴파일 하도록 합니다.

PUN 셋업 위자드가 네트워크 설정과 멀티플레이어 게임을 시작하기 위한 편리한 방식을 제공 합니다: Photon Cloud 입니다!

클라우드요? 네, 클라우드 입니다. 클라우드는 우리가 게임에서 사용할 수 있는 Photon 서버들의 집합입니다. 클라우드에 대해서 잠깐 설명드리겠습니다.

"무료 플랜"으로 클라우드를 이용하면 무료이며 지켜야할 사항이 없으므로 이메일 주소만 입력하면 위자드는 마법을 부리게 됩니다.

photon cloud screen shot: cloud registration
Photon 클라우드 스크린 샷: 클라우드 등록

신규 계정은 즉시 "AppId"를 받게 됩니다. 이미 등록한 메일 주소가 있으면 관리화면을 오픈하여 알 수 있습니다. 로그인 후 "AppId" 를 복사하여 입력 필드에 붙여 넣으시기 바랍니다.

AppId가 저장되면 이 단계가 끝난 것 입니다.

photon cloud
Photon Cloud

음. 그럼 "Photon 클라우드"가 정확히 하는 일은 무엇인가요?!

기본적으로 Photon 클라우드는 Photon 서버가 수행하고 있는 머신들의 집합 입니다. 서버들의 "클라우드"는 Exit Games에서 관리되며 멀티플레이어 게임에서 전혀 신경을 쓰지 않도록 제공 됩니다. 서버는 요청시 추가되기 때문에 어떤 수의 플레이어도 처리할 수 있습니다.

비록 Photon 클라우드가 완전한 무료는 아니지만 일반적인 호스팅과 비교해 볼 때 비용은 저렴 합니다. 가격 정책은 여기에서 알아 보세요.

Photon Unity Networking은 Photon 클라우드를 관리해 주지만 아주 간단 합니다:

모든 플레이어들은 "Name Sever"에 먼저 접속 합니다. 클라이언트의 앱(AppId를 통해)이 무엇이고 어떤 지역을 이용할 것인지를 체크 합니다. 그리고 클라이언트를 마스터 서버로 포워딩 해줍니다.

마스터 서버는 여러 지역 서버들의 허브 역할을 합니다. 마스터 서버는 현재 있는 모든 게임들에 대해서 알고 있습니다. 게임(룸)이 생성 또는 참여 될 때 클라이언트는 "게임 서버"라고 하는 다른 머신으로 포워딩 됩니다.

PUN 설정은 정말 간단하며 호스팅 비용, 성능 또는 유지관리에 대해서 전혀 걱정하지 않아도 됩니다. 한 번도 신경쓰지 않아도 됩니다.

Photon 클라우드는 "룸 기반 게임"으로 구축되며 경기당 제한된 플레이어 수가 있다는 의미 입니다(예:최대 10명). (일반적으로)룸 안에서 모든 사람은 다른 사람이 보낸 것을 수신 합니다. 플레이어들은 룸 밖에서 통신을 할 수 없으므로 가능한 빨리 룸안으로 입장 시켜야 합니다.

룸 안으로 들어가는 가장 좋은 방법은 무작위 매치메이킹을 이용하는 것 입니다. 서버에게 아무 룸을 요청 하거나 특정 프로퍼티를 가진 룸이 있는지 서버에게 문의 할 수 있습니다.

모든 룸은 식별자로써 이름을 가지고 있습니다. 룸이 가득 차 있거나 닫혀지지 않는 한 이름으로 룸에 참여 할 수 있습니다. 편리하게도 마스터 서버는 앱으로 룸의 목록을 제공 해 줄 수 있습니다.

로비

어플리케이션의 로비는 마스터 서버에서 존재 하며 게임의 룸 목록을 제공 합니다. 예제에서는 로비를 사용하지는 않을 것이므로 무작위로 룸에 참여하거나 참여할 수 있는 룸이 없는 경우에 룸을 생성하여 참여 할 수 있도록 만들 것 입니다.(룸에는 최대 수용 인원이 있으므로 정원이 꽉 찰 수도 있습니다.)

어플리케이션 ID와 게임 버전

만약 모든 사람이 동일한 서버에 접속을 하게 된다면 플레이어를 나눌 수 있는 방법이 있어야 합니다.

각각의 게임(어플리케이션으로)은 클라우드에서 자신만의 "AppId" 를 가지고 있습니다. 플레이어들은 동일한 "AppId" 를 가진 클라이언트들의 플레이어들과만 만날 수 있습니다.

"게임 버전"이라는 것도 있는데 이것을 통해 이전 버전의 클라이언트와 새로운 버전의 클라이언트의 플레이어들을 분리 할 수 있습니다.

지역

Photon 클라우드는 전세계적으로 분리된 지역으로 구성되어 있는데 멀리 떨어진 플레이어가 연결이 좋지 않는 것을 방지 하기 위해서 입니다. 특별히 여러 지역으로 흩어져 있는 원격지의 팀과 같이 일 할 때 이 개념을 이해하는 것이 중요 합니다. 동료들과 게임을 테스트 하는 것은 지역의 분리로 인하여 가능하지 않을 수 있습니다. 따라서 테스터들이 동일한 지역으로 강제로 접속하게 하여 서로 소통할 수 있도록 해야 합니다.

개발

각 섹션은 프로젝트 개발 단계에 대한 부분을 다루고 있으며 순차적으로 작업을 진행하는 것이 중요합니다. 단계가 올라갈 수록 스크립팅과 Photon의 지식은 점차적으로 증가 됩니다.

  1. 기본적인 로비 씬 생성.
  2. 사용자 인터페이스(UI)를 통해 로비 씬 개선시키기.
  3. 게임 씬 생성하기.
  4. 레벨 로딩 구현하기.
  5. 기본 플레이어 프리팹 생성하기.
  6. 카메라가 플레이어를 따라가도록 만들기.
  7. 네트워크 기능을 추가하여 플레이어 프리팹 변경하기.
  8. 플레이어 인스턴스화와 씬 스위칭.
  9. 플레이어 사용자 인터페이스(UI).

결론

경험을 쌓기 위하여 기본 필요사항을 통해 플레이어들이 다른 플레이어들과 인터넷상에서 플레이 할 수 있는 작업시스템을 만들었습니다.

Animator를 큰 노력 없이 직관적인 컴포넌트들을 작성 한 것과 더불어 PUN의 제어 방법, PUN 상태, 현재 컨텍스트를 Listen하는 것을 학습 했습니다.

또한 강력한 게임 플레이를 만들기 위한 자동 씬 동기화와 같은 Photon의 흥미로운 기능들도 학습 했습니다.

완벽한 게임을 만들어 출시하기 위해서는 아직 할 것이 많지만 여기에서는 기본 개념을 토대로 이해하기 위하여 일부만을 보여 주고 있습니다.

  • "시작하기" 섹션을 읽어 주셔야 합니다.
  • 무엇을 사용할 수 있는지에 대하여 전반적으로 파악할 수 있도록 호기심을 갖고 문서와 API 레퍼런스를 읽어주십시오. 바로 학습 하실 필요는 없으나 나중에 필요할 때 또는 새로운 기능을 구현할 때 이 문서들을 기억하고 살펴 보시기 바랍니다. 일부 기능과 프로퍼티가 관계되어 있다는 것을 기억 하시고 앞으로 이것들에 대해서 학습할 것입니다
  • 포럼을 활용하여 문제, 이슈 그리고 좌절감을 느끼는 상황에 대해서도 공유해 주세요 :) 포럼을 이용하여 문제 해결의 실마리를 찾을 수 있습니다. 내 문제를 다른 개발자가 이해 할 수 있도록 발생하고 있는 문제를 잘 설명하는 것이 훨씬 더 문제 해결을 쉽게 할 수 있습니다. 유니티와 PUN의 숙련도에 따라 질문의 레벨은 달라지게 되므로 질문 하는것을 주저하지 마시고 어떤 것이라도 질문 해주세요.

다음 장.

Back to top