PUN Classic(PUN1이라고도 불립니다)은 PUN의 첫 버전입니다.         현재는 리팩토링 및 기능 확장에 의해 PUN2로 새롭게 바뀌었습니다.          새 프로젝트에는 PUN2를 이용해 주시고, 기존의 프로젝트도 가능하면 PUN1에서 PUN2로 옮기는 것을 권장합니다.  자세한 내용은: "마이그레이션 노트". PUN Classic은 곧 점검이 시작됩니다.        중요한 버그의 수정과 Unity의 신버전의 지원 등을 예정하고 있습니다. 신기능의 추가는 PUN2에서만 이루어지므로 주의해 주십시오.

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 는 클라이언트 측에서 사용할 수 있습니다.

Back To Top

코드가 필요 합니다

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

Back To Top

접속

    PhotonNetwork.ConnectUsingSettings("v4.2");

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

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

Back To Top

매치메이킹

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

    //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 를 이용하여 룸 이름을 결정할 수 있습니다. 친구들이 룸 이름을 알고 있다면 다른 사람이 볼 수 없게 룸을 생성 할 수 있습니다:

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

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

Back To Top

게임플레이

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

    // 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 도 할 수 있습니다.

    // 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와는 별도로 자신만의 이벤트를 보낼 수 도 있습니다.

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

기술문서 TOP으로 돌아가기