본문 바로가기
Study/Unity

[Unity] Photon

by chobbo 2024. 6. 13.

 Photon 이란? 

- Exit Games에서 개발한 멀티플레이어 게임 개발을 위한 네트워크 엔진

 

 

이중 Photon PUN2

- 실시간 멀티플레이어 게임 개발 가능

- CCU (Concurrent User, 동시 접속자 수) 증가에 따른 대응이 필요없다. (단, 유료로 이용시!)

 

 

주요 클래스 설명

 

1. PhotonNetwork 

1.1 ConnectUsingSettings 메서드

PhotonNetwork.ConnectUsingSettings();

 

- 메서드 실행 시 앱이 포톤 클라우드에 연결.

- PhotonNetwork.IsConnected를 통해 연결 상태 확인 가능

 

 

1.2 CreateRoom 및 JoinRoom 메서드

PhotonNetwork.CreateRoom("RoomName");
PhotonNetwork.JoinRoom("RoomName");
PhotonNetwork.JoinOrCreateRoom("RoomName");

 

- PhotonNetwork.CreateRoom 를 통해 새로운 방 생성

- PhotonNetwork.JoinRoom 를 통해 이미 존재하는 방에 입장

- PhotonNetwork.JoinOrCreateRoom 를 사용하면 방이 있으면 입장, 없으면 새로 만든다

 

 

1.3 Instantiate 메서드

PhotonNetwork.Instantiate("PrefabName", position, rotation);

 

- 포톤 네트워크를 통해 새로운 게임 오브젝트 생성

- Unity의 Instantiate와 비슷하나, 네트워크를 통해 동기화

-> 즉, 네트워크에 연결된 모든 플레이어에게 오브젝트가 동일하게 나타난다.

-> 동시성 유지, 상태 동기화, ID할당, RPC 호출이 가능해짐

더보기

[RPC]
- Remote Procedure Call의 약자

- 다른 유저들의 클라이언트에서 메소드를 실행시킬 수 있도록 함

- 포톤에서 RPC로 실행하기 위해서는 메소드에 [PunRPC] Attribute를 추가해야한다.

   & RPC를 실행할 때는 PhotonView.RPC(”RPC메소드명”, RPC 타겟, [파라미터]);으로 작성해야 한다

 

 

2. MonoBehaviourPunCallbacks

2.1 OnConnectedToMaster 메서드

public override void OnConnectedToMaster() { ... }

 

- 게임이 포톤 마스터 서버에 성공적으로 연결되면 호출

 

 

2.2  OnJoinedRoom 메서드

public override void OnJoinedRoom() { ... }

 

- 로컬 플레이어가 방에 입장하면 호출

 

 

2.3 OnPlayerEnteredRoom 메서드

public override void OnPlayerEnteredRoom(Player newPlayer) { ... }

 

- 다른 플레이어가 방에 입장하면 호출

 

 

2.4 OnPlayerPropertiesUpdate 메서드

public override void OnPlayerPropertiedUpdate(Player targetPlayer, Hashtable changedProps)

 

- 커스텀 프로퍼티가 변경되었을 때 호출

 

 

2.3 OnRoomListUpdate 메서드

public override void OnRoomListUpdate(List<RoomInfo> roomList)

 

- 방 목록이 변경되었을 때 호출

 

 

 

주요 컴포넌트 설명

1. PhotonView


- 포톤 네트워크에서 네트워크 상태를 동기화하는 데 사용

- PhotonNetwork.Instantiate를 사용해 생성된 객체가 네트워크를 통해 동기화

   -> 원래 이렇게 추가된 오브젝트를 동기화 하는 것은 매우 복잡한 일 -> 보통 RPC 사용

   -> 포톤은 컴포넌트를 등록만 하면 동기화되도록 많이 간편하게 만들어 둔 엔진

   -> 아래 2,3,4번 View들을 사용하면 RPC 없어도 자동으로 상태가 동기화된다

 

- 주로 Transform 컴포넌트나 사용자 정의 스크립트와 같이 동기화하고자 하는 컴포넌트를 참조


2. PhotonTransformView


- 위치, 회전, 및 크기를 동기화하는 데 사용되는 컴포넌트

- PhotonView에 추가하여 사용

- 이 컴포넌트를 통해 게임 오브젝트의 움직임이 네트워크를 통해 동기화됨

3. PhotonAnimatorView

 

- Animator 컴포넌트를 동기화하는 데 사용됨

- PhotonView와 함께 사용되며, 애니메이션 상태와 변수를 동기화하는 데 사용

4. PhotonRigidbodyView

- Rigidbody 또는 Rigidbody2D 컴포넌트를 동기화하는 데 사용

- 움직임과 회전을 동기화하여 물리적 효과를 네트워크를 통해 동기화할 수 있다

 

 

'Study > Unity' 카테고리의 다른 글

[Unity] Serializefield & Property  (0) 2024.06.16
[Unity] Photon 사용해보기 - 멀티플레이 게임 구현  (0) 2024.06.13
[Unity] Particle System  (0) 2024.06.12
[Unity] Mixamo 애니메이션 적용법  (0) 2024.06.03
[Unity] AI Navigation  (0) 2024.05.31