This document is about: PUN 1
SWITCH TO

PUN Classic (v1), PUN 2, Bolt는 휴업 모드입니다. Unity2022에 대해서는 PUN 2에서 서포트하지만, 신기능의 추가는 없습니다. 현재 이용중인 고객님의 PUN 및 Bolt 프로젝트는 중단되지 않고, 퍼포먼스나 성능이 떨어지는 일도 없습니다. 앞으로의 새로운 프로젝트에는 Photon Fusion 또는 Quantum을 사용해 주십시오.

Photon Unity Networking 소개

시작하기

Photon Unity Networking (PUN) 은 Photon 백엔드를 이용하여 인증 옵션, 매치메이킹과 빠르고 신뢰도가 높은 게임내 커뮤니케이션을 제공 합니다.

PUN은 유니티에서 지원하는 대부분의 플랫폼에서 익스포트 되며 두가지 유형이 있습니다:

PUN FREE

pun free unity plugin 거의 모든 플랫폼에 익스포트 합니다. IOS와 Android 익스포트는 Unity 5 또는 모바일 라이선스가 있는 Unity 4 프로가 필요 합니다.

Get PUN FREE

PUN PLUS

pun free unity plugin Unity 라이선스에 관계 없이 모든 플랫폼에 익스포트 합니다. 100 명의 동시 접속자를 제공합니다.Photon Realtime 60 개월 플랜.

PUN PLUS

노트: Unity 5 에서 두개의 PUN 패키지 파일들은 동일 합니다. 60개월 동안 100 CCU 를 이용하기 위해서 PUN+ 를 구매할 수 있지만 PUN Free 는 클라이언트 측에서 사용할 수 있습니다.

코드가 필요 합니다

PUN을 제대로 활용하기 위해서는 일부 스크립트를 작성해야 합니다. 이 페이지에서는 시작 할 때 필요한 가장 중요한 사항을 보여 줍니다.

접속

C#

    PhotonNetwork.ConnectUsingSettings("v4.2");

위 코드는 Photon 기능 사용을 하기 위해 접속하는 코드 입니다.

ConnectUsingSettings 에는 클라이언트의 게임 버전을 설정하고 PUN 셋업 위자드가 작성 해 놓은 설정 파일을 사용하는데 설정파일의 PhotonServerSettings 에 저장되어 있습니다.

매치메이킹

다음으로 생성되어 있는 방에 참여하거나 방을 생성 할 수 있습니다. 다음 코드에는 게임 참여 또는 룸을 생성하는 방법을 보여 줍니다.

C#

    //Join room "someRoom"
    PhotonNetwork.JoinRoom("someRoom");
    //Fails if there are no open games. Error callback: OnPhotonJoinRoomFailed

    //Tries to join any random game:
    PhotonNetwork.JoinRandomRoom();
    //Fails if there are no open games. Error callback: OnPhotonRandomJoinFailed

    //Create this room.
    PhotonNetwork.CreateRoom("MyMatch");
    // Fails if "MyMatch" room already exists and calls: OnPhotonCreateRoomFailed

일반적으로 친구들과 함께 게임하는 것이 더 즐겁습니다. 만약 서로 소통(예,Photon Chat, Facebook 을 통해서)할 수 있다면 JoinOrCreateRoom 를 이용하여 룸 이름을 결정할 수 있습니다. 친구들이 룸 이름을 알고 있다면 다른 사람이 볼 수 없게 룸을 생성 할 수 있습니다:

C#

    RoomOptions roomOptions = new RoomOptions() { isVisible = false, maxPlayers = 4 };
    PhotonNetwork.JoinOrCreateRoom(nameEveryFriendKnows, roomOptions, TypedLobby.Default);

JoinOrCreateRoom 를 이용하여 존재하지 않는 룸이면 새롭게 생성됩니다. 만약 룸이 가득차 있다면 OnPhotonJoinRoomFailed 가 호출됩니다(어딘가에 구현해 놓았다면).

게임플레이

게임오브젝트들은 "networked GameObjects" 로 인스턴스화 될 수 있습니다. 게임오브젝트들은 식별되는 PhotonView와 소유자(또는 컨트롤러)를 가지고 있습니다. 소유자는 모든 것을 갱신합니다. 지속적인 업데이트는 PhotonView의 Observed 필드에 스크립트를 드래그하여 전송 될 수 있습니다. 그 스크립트는 OnPhotonSerializeView 를 아래의 코드 처럼 반드시 구현해야 합니다.

C#

    // in an "observed" script:
    public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
    {
        if (stream.isWriting)
        {
            Vector3 pos = transform.localPosition;
            stream.Serialize(ref pos);
        }
        else
        {
            Vector3 pos = Vector3.zero;
            stream.Serialize(ref pos);  // pos gets filled-in. must be used somewhere
        }
    }

클라이언트는 드물기는 하지만 Remote Procedure Calls 도 할 수 있습니다.

C#

    // defining a method that can be called by other clients:

    [PunRPC]
    public void OnAwakeRPC(byte myParameter)
    {
        //Debug.Log("RPC: 'OnAwakeRPC' Parameter: " + myParameter + " PhotonView: " + this.photonView);
    }

    // [...]
    // calling the RPC somewhere else
    photonView.RPC("OnAwakeRPC", PhotonTargets.All, (byte)1);

GameObjects와는 별도로 자신만의 이벤트를 보낼 수 도 있습니다.

C#

    PhotonNetwork.RaiseEvent((byte)eventCode, (object)eventContent, (bool)sendReliable, (RaiseEventOptions)options)
Back to top