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 |