TIL.36 - Photon

김진영·2024년 6월 13일

스파르타코딩

목록 보기
37/39
post-thumbnail

요즘 게임들은 멀티플레이가 정말 많다. 그도 그럴것이 멀티플레이가 있는 게임이 싱글플레이만 있는 게임보다 더 많이 팔리기 때문이다. 곧 최종프로젝트에 앞서서 출시를 하게 된다면 멀티플레이제작도 고려해야하므로 멀티플레이에 대해 알아보겠다.

1. 포톤이란?


포톤 (Photon)은 Exit Games에서 개발한 멀티플레이어 게임 개발을 위한 네트워크 엔진
Unity와 같은 게임 엔진과 함께 사용되어 멀티플레이어 기능을 게임에 추가할 수 있게 한다.

포톤 에셋 다운로드 사이트 링크

2. 포톤 PUN2의 주요 특징


  • Real-time, Multiplayer: 포톤은 실시간 멀티플레이어 게임 개발에 초점을 맞추고 있다.
  • Dead-easy API: 초보자도 할 수 있는 쉬운 API 구성을 가지고 있다.
  • Loadbalanced: 별도의 설정 없이 CCU증가에 따른 대응 별도 설정 필요 없다(유료).

3. 포톤의 주요 클래스


  • 1. PhotonNetwork 클래스
    PhotonNetwork 클래스는 포톤 네트워크의 주요 기능에 액세스하는 중심적인 클래스 1.1. ConnectUsingSettings 메서드
    PhotonNetwork.ConnectUsingSettings();
    이 메서드를 호출하면, 앱이 포톤 클라우드에 연결된다는 PhotonNetwork.IsConnected로 확인할 수 있다.

1.2. CreateRoom 및 JoinRoom 메서드

PhotonNetwork.CreateRoom("RoomName");
PhotonNetwork.JoinRoom("RoomName");
PhotonNetwork.JoinOrCreateRoom("RoomName"); // 없으면 만들고 있으면 들어감

CreateRoom 메서드는 새로운 방을 만들고, JoinRoom 메서드는 이미 존재하는 방에 참가한다.

1.3. Instantiate 메서드

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

포톤 네트워크를 통해 새로운 게임 오브젝트를 생성한다.
이 메서드는 Unity의 Instantiate 메서드와 유사하나, 네트워크를 통해 동기화한다.

  • 2. MonoBehaviourPunCallbacks 클래스

MonoBehaviourPunCallbacks 클래스는 포톤의 주요 이벤트에 대한 콜백 메서드를 제공한다.

2.1. OnConnectedToMaster 메서드

public override void OnConnectedToMaster() { ... }

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

2.2. OnJoinedRoom 메서드

public override void OnJoinedRoom() { ... }

로컬 플레이어가 방에 입장하면 호출된다.

2.3. OnPlayerEnteredRoom 메서드

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

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

4. 주요 컴포넌트 및 기능


  • 컴포넌트 소개 포톤에서 주요하게 사용되는 컴포넌트 몇 가지
    1. PhotonView

      PhotonView는 포톤 네트워크에서 네트워크 상태를 동기화하는 데 사용된다. 이 컴포넌트를 통해 PhotonNetwork.Instantiate를 사용해 생성된 객체가 네트워크를 통해 동기화된다. PhotonView는 주로 Transform 컴포넌트나 사용자 정의 스크립트와 같이 동기화하고자 하는 컴포넌트를 참조한다.

      • RPC RPC는 Remote Procedure Call의 약자로, 다른 유저들의 클라이언트에서 메소드를 실행시킬 수 있도록 한다. 포톤에서 RPC로 실행하기 위해서는 메소드에 [PunRPC] 어트리뷰트를 추가해야 하며, RPC를 실행할 때는 PhotonView.RPC(”RPC메소드명”, RPC타겟, [파라미터]);으로 작성해야 한다.
    2. PhotonTransformView

      PhotonTransformView는 위치, 회전, 및 크기를 동기화하는 데 사용되는 컴포넌트이다. PhotonView에 추가하여 사용하며, 이 컴포넌트를 통해 게임 오브젝트의 움직임이 네트워크를 통해 동기화된다.

    3. PhotonAnimatorView

      PhotonAnimatorView는 Animator 컴포넌트를 동기화하는 데 사용된다. 이 컴포넌트는 PhotonView와 함께 사용되며, 애니메이션 상태와 변수를 동기화하는 데 사용된다.

    4. PhotonRigidbodyView

      PhotonRigidbodyView는 Rigidbody 또는 Rigidbody2D 컴포넌트를 동기화하는 데 사용된다. 이 컴포넌트는 움직임과 회전을 동기화하여 물리적 효과를 네트워크를 통해 동기화할 수 있다.

5. 회고


게임 플레이에 있어서 언제나 인기가 많은 멀티플레이에 사용하는 에셋과 그 메서드, 기능들을 살펴보았다. 다다음주면 최종프로젝트가 시작되고 그 프로젝트에서 완성한 결과물은 출시를 염두하고 만드는 것이기 때문에 멀티플레이가 적용되면 아마 플러스요소가 될 것이다.

그리고 여태까지 고민했던 일이 하나 있었는데 슬슬 결심이 선 것 같다.

0개의 댓글