자료실

[Photon Engine] PUN vs Bolt
작성자 | admin 2021-01-11  |    조회수 : 2412  

구조도
PUN :



릴레이 서버, API 중 최상위 레벨은 PUN 코드로, 네트워크 객체, RPC 등과 같은 Unity의 기능을 구현합니다. 두번째 레벨은 Photon 서버, 매치메이킹, 콜백 등과 관련된 로직이 포함되어 있습니다. 가장 낮은 레벨은 DLL 파일들로 이루어져 있으며, 직렬화/비직렬화,프로토콜 등과 같은 것으로 구성되어 있습니다.



Bolt :



호스팅된 클라이언트. 위 이미지의 2,3번 유저는 직접 연결이 불가능하여 포톤을 통해 접속하고, 4,5,6번 유저는 직접 연결이 가능하여 1번 유저가 직접 호스팅을 하고 있습니다.




지연보상

동기화 문제에서 발생하는 증상으로써 한 클라이언트에서 보내는 메세지가 다른 클라이언트로 '이동'하는데 걸리는 시간차이 때문에 발생합니다. 움직임이 느린 경우 눈에 띄지 않을 수 있습니다. 그러나 이동 속도가 매우 빠르면 다른 게임에서 차이가 명확하게 표시될 수 있습니다.
PUN : OnphotonSerializeView함수에서 포지션 격차를 보완하고, FixedUpdate 함수에서 회전 격차를 보완합니다.



코드예시


OnphotonSerializeView 함수는 PhotonView에 대한 동기화 데이터를 쓰고 읽을 수 있도록 초당 PUN에 의해 여러 번 호출됩니다.이는 PhotonView가 정기적으로 동기화 하는 데이터를 사용자가 정의할 수 있습니다. 즉, 전송되는 내용과 클라이언트가 데이터를 사용하는 방법을 정의합니다. 이 함수 인자로 PhotonStream을 받습니다. PhotonView를 제어하는 클라이언트의 "쓰기"모드 (PhotonStream.IsWriting == true)와 제어 클라이언트가 전송한 원격 클라이언트의 "읽기 모드"입니다.
스트림에 값을 쓰지 않으면 PUN은 업데이트를 건너 뜁니다.



Bolt : Bolt Physics를 이용해서 격차를 보완합니다.
코드예시


Bolt Physics를 사용하기 전에 Bolt Hit Box Body 컴포넌트를 추가해야합니다. 그리고 나서 RaycastAll 함수를 이용하면 됩니다.
* RayCast란? 3차원 공간에서 어느 한 점(시작점)에서 Ray를 정해진 방향(direction Vector)으로 진행하여 Ray와 충돌되는 객체를 구하는 방법




동기화

PUN : RPC(원격 프로시저)등. 같은 룸에 있는 다른 클라이언트에 있는 메소드를 호출하는 것입니다. 호출될 함수에는 '[PunRPC]'속성이 적용되어 있어야 합니다. PhotonView가 함수를 호출합니다.



* RPC 조금 더 자세히
https://photonkr.tistory.com/22



Bolt : 이벤트 입력. 즉, 플레이어가 입력한 w,a,s,d 키, 마우스 클릭 등 이런 input을 동기화 합니다. 또한 3D 물리엔진을 구비하고 있고 클라이언트 쪽에서 움직임을 예측하며 롤백기능이 있어 클라이언트가 일치하도록 조절해줍니다.




매치메이킹

다른 유저와 같이 플레이하기 위하여 룸에 입장하는 것은 Photon에서 매우 쉽습니다.
PUN : 기본적으로 3가지 방법을 제공합니다.

1. 서버에게 매칭되는 룸을 찾은 후 입장.
2. 친구를 따라 룸에 입장.
3. 룸의 목록을 얻어 사용자가 하나를 선택하여 입장. 여러 방법 중 대표적인 하나를 예로 들면, JoinRandomRoom 함수를 이용해 룸에 입장할 수 있습니다. 즉, 로비에서 룸이 입장하고, 룸이 없으면 입장 실패합니다. 로비를 많이 생성했다면 맞는 룸을 찾기 위하여 JoinRandomRoom 함수를 반복해야 할 수 있습니다. 이 메소드는 현재 참여한 로비내에 있는 룸을 찾거나 로비에 있지 않는 상태라면 디폴트 로비에서 찾습니다.



Bolt : Bolt.Matchmaking. BoltMatchmaking 클래스를 이용합니다. 순서로는 현재 세션 얻어오기 -> 세션 생성하고 갱신하기 -> 만든 세션에 참여하기. 세션에 참여하는 방법은 udp로, 이름으로, 랜덤으로 할 수 있습니다.


코드 예시
세션 얻어오기


세션 생성





* Bolt.Matchmaking.Matchmaking 클래스 API
https://doc-api.photonengine.com/en/bolt/current/class_bolt_1_1_matchmaking_1_1_bolt_matchmaking.html





추천 게임장르
PUN : 퍼즐,턴베이스 등


Bolt : FPS, TPS, 슈팅 등


아래 링크에서 플랫폼, 장르, Photon 서비스를 필터링하여 출시된 게임을 확인할 수 있습니다.
https://www.photonengine.com/ko-kr/pun/showcase#allPlatforms-allGenres-allTypes





요약

PUN : Photon Realtime을 유니티에 매우 적합하게 만든 제품입니다. 네트워킹 경험이 적다면 PUN으로 시작하는 것이 좋습니다.
Bolt : 이벤트 기반의 네트워크 솔루션입니다. 기술문서를 참고하면서 개발하시면 됩니다.





-
★Photon 공식 홈페이지
https://www.photonengine.com/ko-kr/Photon

★Photon Help Center
https://support.photonengine.jp/hc/ko

★Photon Korea 공식 블로그
https://photonkr.tistory.com

★Photon Korea 페이스북
https://www.facebook.com/photoncloudkr

★Photon Korea 유튜브
https://bitly.kr/photonyoutube