This document is about: PUN 1
SWITCH TO

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

턴-기반 게임 데모

Photon Unity Networking (PUN)은 전략 타이틀 또는 보드 게임과 같은 턴 기반 게임용으로 사용할 수 있습니다. 이 문서에서는 PUN 패키지에 있는 가위바위보 데모를 통해 이러한 게임의 구현 방법에 대한 개요를 설명합니다.

이 데모는 몇 가지 컴포넌트 스크립트를 중심으로 진행됩니다:PunTurnManager,RpsCore,RpsDemoConnect.

PunTurnManager

PunTurnManager는 유사한 게임과 로직에서 재사용 할 수 있는 일반적인 컴포넌트 클래스입니다. 필수 사항은 아니지만 턴 기반 게임을 신속하게 시작하고 실행할 수 있는 간단하고 멋진 래퍼라는 것이 중요합니다. 이것은 보다 복잡하고 독창적인 게임 플레이를 구축하기 위한 아주 좋은 출발점 입니다.

데이터 저장의 관점에서 볼 때 이는 [룸 사용자정의 속성] 에만 의존하며, 게임 라이프 사이클 동안에 게임 데이터를 유지하는 매우 효율적인 방법입니다.
따라서 추가적인 기능과 데이터가 필요한 경우 게임 관련 데이터를 정의하고 읽고 쓰는데 [룸 사용자정의 속성]을 계속 확장하는 것이 좋습니다.
데이터를 외부화하지 않고도 간단하게 Webhooks를 구현하여 타사 시스템의 [룸 사용자정의 속성] (그러나 단지)을 가져오고 데이터 처리, 고득점을 관리하고, 알림을 전송, 이에 대한 통계 관리 할 수 있는 Webhooks이 있다는 것을 잊지 마십시오.

IPunTurnManagerCallbacks

IPunTurnManagerCallbacks 인터페이스로, 메인 turn-based 메시지 콜백을 리슨 할 수 있습니다. RpsCore 스크립트를 참조하여 PunTurnManager 바인드 방식을 확인해 보세요.

이러한 콜백을 적절하게 리슨하여 모든 클라이언트들의 현상황을 추적하기 위해서 턴기반 관리는 중요한 관점입니다. 게임 결과를 감지 하기위해 이것에 의지 할 수 있습니다, 아니 의지해야 합니다.

TurnManager 확장

턴 기반 시스템을 위해 특별히 설계된 확장판에서 PUN의 새로운 속성 및 메서드에서 알려진 다양한 클래스를 찾을 수 있습니다. 이러한 확장판은 PunTurnManager.cs에서 TurnExtensions 클래스안에 선언되어 있습니다. 이것은 명확한 API를 제공하고 코드의 가독성이 쉽습니다.

특정 요구사항에 부응하기 위해서 나만의 확장 기능을 자유롭게 생성하세요. 특히 게임 로직에서 플레이어와 룸의 사용자정의 속성 사용을 숨깁니다. 이렇게 함으로써 시간이 지남에 따라 프로젝트가 점점 더 복잡해지더라도 더 많은 유연성과 보다 쉬운 리팩토링을 할 수 있게 됩니다.

RpsCore

RpsCore 컴포넌트 스크립트는 이 데모의 전용스크립트로 특정 규칙과 전통적인 가위 바위 보 게임용 데이터를 구현합니다. 시각 인터페이스, 게임 로직과 PunTurnManager 간의 중재자 역할을 합니다.

PunTurnManager을 처리하면, 이것의 모든 콜백들을 구현하고 게임의 현재 상태를 반영해주는 다양한 UI 요소를 제어합니다. 또한 사용자 입력도 처리합니다.

일반적인 게임과 필요한 것 또는 특정 게임에서만 필요한 것들을 분리 하는 것이 좋습니다. 새로운 기능을 개발할 때는 이 사항을 명심하세요.

RpsDemoConnect

RpsDemoConnect 컴포넌트는 일반적인 연결, 룸과 로비 참여를 하는 PUN 프로젝트와 아주 유사합니다.

하지만, 이 컴포넌트는 매우 중요한 기능이 있습니다:룸에 다시 참여하는 기능인데, 턴 기반 게임에서 필수적인 것 입니다. 사상은 사용자가 이전에 연결 되었던 룸을 추적하여 다시 연결할 때 이전에 연결되었던 방을 감지하여 그 방에 다시 참여하는 것입니다.
이것은 PhotonNetwork.ReJoinRoom(string roomName) 을 사용하여 이루어지며, 성공적인 재-참여 호출을 위한 RoomOptions.PlayerTtl (Player Time to Live) 에 의존합니다. 예를들면, 며칠동안 플레이어가 연결해제되어있는 것을 허용하는 게임인 경우, RoomOptions.PlayerTtl 을 "(일수) * 24 * 60 * 60 * 1000" 로 설정해야 할 것 입니다.

RpsDemoConnect 컴포넌트는 연결과 플레이를 위한 기본 요건을 충족합니다. 실제 프로젝트에서는, 연결상태, 로비, 친구목록과 같은 모든 소셜 관점 등에 대하여 피드백을 제공하기 위해 확장이 필요 할 것 입니다. 게임 개발의 이것은 턴 기반과 관계없이 대부분의 네트워크 게임에서 동일한 관점입니다.

할 것과 하지 말아야 할 것

PUN을 사용하여 턴 기반 게임을 만드는 것은 PUN 기능을 올바르게 사용함은 물론 턴 기반 환경에서 지원되지 않는 특정 기능은 사용하지 않아야 한다는 것 입니다.

할 것

  • 룸 생성시에는 플레이어 타임을 라이브로 올바르게 설정하세요.
  • 룸 속성을 사용하여 진행중인 게임의 데이터를 추적하세요.
  • 사용자정의 플레이어 속성을 사용하여 플레이 세션간에 유지 되어야 하는 플레이어의 데이터를 추적합니다.
  • PhotonPlayer.ID를 사용하여 플레이어들을 추적합니다
  • PhotonPlayer.GetNext()를 사용하여 턴을 통과하기 위해 플레이어간에 반복합니다.
  • PunPlayerScores 확장을 사용하여 그리고/또는 보다 복잡한 점수 또는 데이터 관리를 만들기 위해 영감을 얻으세요.
  • 플레이어는 방에서 비활성 상태가 될 수 있습니다. PhotonPlayer.isInactive를 확인하여 현재 온라인 상태가 아닌 플레이어를 찾으세요.

하지 말아야 할 것

  • PhotonView 컴포넌트와 파생된 것을 사용하지 마세요. PUN은 소유자가 비활성 일 때 PUN이 제어을 넘겨줍니다(룸 내에 있지 않음).
  • PunRPC는 PhotonViews가 필요하므로 사용하지 마세요.
    대신 PhotonNetwork.RaiseEvent를 사용 하세요.
  • [PhotonNetwork.Instantiate()]를 사용하지 마세요.
Back to top