포톤 (Photon) 은 멀티플레이를 구현하는 솔루션 중 가장 유명한 네트워크 엔진 중 하나이다.
여러 엔진에 적용 가능하고, 크로스플랫폼 간 통신도 지원하는 등 매우 강력한 기능들을 지원한다.
포톤 기본 기능
포톤의 가장 기본적인 기능은 포톤 클라우드와 연결을 설정하는 메서드와 연결된 클라우드와 클라이언트 간 동기화 기능들이 있겠다.
PhotonNetwork
PhotonNetwork
클래스는
포톤의 주요 기능을 담은 클래스로,
주로 연결을 설정하는 기능들을 담고 있다.
1) ConnectUsingSettings()
PhotonNetwork.ConnectUsingSettings();
클라이언트와 포톤 클라우드를 연결하는 메서드이다.
연결되었는지 아닌지는 PhotonNetwork.IsConnected
로 확인할 수 있다.
2) CreateRoom() & JoinRoom()
PhotonNetwork.CreateRoom("RoomName");
PhotonNetwork.JoinRoom("RoomName");
CreateRoom
메서드로 새로운 방을 만들고
JoinRoom
으로 만들어진 방에 참가하는 기능이다.
3) Instatiate()
PhotonNetwork.Instantiate("PrefabName", position, rotation);
기능은 Unity의 Instantiate와 완전히 똑같다.
차이라면 Unity의 Instantiate는 클라이언트에서 오브젝트를 생성하고, Photon의 Instantiate는 서버에서 오브젝트를 생성한다.
서버에서 오브젝트가 생성되면 각 클라이언트들을 서버의 정보를 가지고 동기화를 시켜주는데, 클라이언트에서 오브젝트를 생성하게 되면 자동으로 동기화를 해주지 않기 때문에 내 클라이언트에서 생성한 오브젝트는 다른 클라이언트에서 보이지 않게 된다.
물론 뒤에 소개할 포톤뷰 컴포넌트들을 사용한다면 클라이언트에서 생성된 오브젝트더라도 서버와 동기화가 가능해진다.
MonoBehaviourPunCallbacks
포톤의 주요 이벤트들에 대한 콜백 메서드를 담고 있는 클래스이다.
1) OnConnectedToMaster()
public override void OnConnectedToMaster() { ... }
게임이 포톤 마스터 서버에 성공적으로 연결되면 호출된다.
포톤 마스터 서버는 포톤 서비스를 제공하기 위한 가장 기본 네트워크이다.
2) OnJoinedRoom() & OnPlayerEnteredRoom()
public override void OnJoinedRoom() { ... }
public override void OnPlayerEnteredRoom(Player newPlayer) { ... }
OnJoinedRoom
은 내가 방에 입장했을 때,
OnPlayerEnteredRoom
은 다른 플레이어가 방에 입장했을 때
호출되는 콜백 메서드이다.
포톤뷰 (PhotonView) 컴포넌트
포톤에서 가장 중요한 동기화를 위해 사용되는 컴포넌트들이다.
해당 컴포넌트들을 게임 오브젝트에 달아줘야 그 컴포넌트에서 지원하는 동기화가 가능해진다.
PhotonView
포톤뷰 컴포넌트를 달아주면 포톤뷰에서 해당 오브젝트에 변화가 없는지를 계속 관찰하게 되고, 값을 변경하면 Syncronization 과정을 거쳐 동기화를 해주게 된다.
Ownership이라는 것은, 포톤의 소유권을 의미하는 것이다.
기본적으로 소유권은 게임오브젝트를 생성한 곳 (서버 or 각 클라이언트) 에서 갖게 된다.
Fixed
면 소유권이 항상 고정되어 있는 상태,
Takeover
는 다른 클라이언트가 소유권을 가져올 수 있는 상태,
Request
는 현재 소유권을 가지고 있는 곳에다가 소유권을 달라고 요청할 수 있는 상태(거절가능)이다.
Syncronizatiton
에서는 동기화를 어떤 방식으로 해줄 것인지를 결정한다.
Off
는 받은 데이터를 비교해서 변화가 없을 경우 동기화 신호를 보내지 않고,
Unreliable
은 일정 주기마다 계속 신호를 보낸다.
Unreliable On Change
는 데이터 변화가 있을 때마다 신호를 계속 보내는 것이다.
Unreliable
과 Unreliable On Change
는 모두 Observed Component
에 동기화할 컴포넌트를 등록시켜줘야 변화를 관찰하고, 신호를 보내주게 된다.
Observed Component 추가 PhotonView
기본적인 동기화는 PhotonView를 통해 이루어지고, Observed Component에 추가하여 동기화할 컴포넌트들을 추가시켜줄 수 있다.
1) PhotonTransformView
PhotonTransformView
는 말그대로 Transform의 동기화를 위해 사용된다.
게임 오브젝트의 위치, 회전, 크기 등의 동기화를 수행한다.
2) PhotonAnimatorView
PhotonAnimatorView
는 Animator 동기화를 위해 사용된다.
애니메이션 상태 및 변수 등이 동기화된다.
3) PhotonRigidbodyView
PhotonRigidbodyView
는 Rigidbody나 Rigidbody2D를 동기화하는데 사용된다.
물리적 효과를 네트워크를 통해 동기화하는 것이다.
Uploaded by N2T
'개발 > Unity 내일배움캠프 TIL' 카테고리의 다른 글
Visual Studio 단축키 (0) | 2023.10.13 |
---|---|
유니티 포톤 (Photon) 셋업하기 (0) | 2023.10.12 |
Unity3D FSM으로 플레이어 캐릭터 조작 구현하기 (3) (0) | 2023.10.10 |
Unity3D FSM으로 플레이어 캐릭터 조작 구현하기 (2) (0) | 2023.10.06 |
Unity3D FSM으로 플레이어 캐릭터 조작 구현하기 (1) (0) | 2023.10.05 |