소개
Photon Unity Networking (PUN)은 멀티플레이어 게임용 유니티 패키지입니다.
유연한 매치메이킹을 통해 플레이어들은 객체들이 네트워크를 통해 동기화될 수 있는 룸으로 이끌어 줍니다.
RPC, 사용자 정의 속성 또는 "저 수준" Photon 이벤트들은 이 기능의 일부입니다.
빠르고 (선택적으로) 신뢰할 수 있는 커뮤니케이션은 전용 Photon 서버를 통해 이루어지므로 클라이언트들은 1 대 1 연결이 필요하지 않습니다.
PUN 기본적으로 Unity가 지원하는 모든 플랫폼으로 엑스포트되며 다음 두 가지 옵션이 있습니다:
PUN FREE
다양한 데모, 사전 구축된 스크립트와 참조 문서가 있는 무료 패키지. 기본적으로 모든 플랫폼에 엑스포트.
PUN PLUS>
PUN FREE와 동일한 컨텐츠, 추가적으로 Photon Cloud 100명 동시접속 사용자 플랜(약. 40k MAU, 60개월 유효).
PUN의 구조
일반적으로 PUN 패키지의 구조에 대해서는 신경 쓸 필요가 없으나, 다음과 같이 이루어져 있습니다. PUN 패키지는 다음 세 가지 API 레이어로 구성되어 있습니다.
- 최상위 레벨은 PUN 코드로, 네트워크 객체, RPC 등과 같은 Unity의 기능을 구현합니다.
- 두 번째 레벨은 Photon 서버, 매칭메이킹, 콜백 등과 관련된 로직이 포함되어 있습니다. 이 레벨은 실시간 API입니다. 이것 자체를 사용할 수 있습니다. PUN과 실시간 API(LoadBalancing API로 알려져 있는) 간에 주제가 많이 겹치는 것을 볼 수 있지만 괜찮습니다.
- 가장 낮은 레벨은 DLL 파일들로 이루어져 있으며, 직렬화/비직렬화, 프로토콜등과 같은 것으로 구성되어 있습니다.
시작하기
PUN을 최대로 활용하려면 일부 프로그래밍을 해야 합니다.
이 페이지에서는 몇 가지 중요한 코드 일부를 개략적으로 살펴보겠습니다.
올바르게 시작하려면, "PUN 기본 자습서"를 진행하십시오.
연결과 콜백
ConnectUsingSettings
은 즉시 온라인 상태로 만들어줍니다: 이 함수는 PhotonServerSettings
에셋에서 모든 중요한 설정내용들을 가져와 처리합니다.
C#
PhotonNetwork.ConnectUsingSettings();
PUN은 콜백을 사용하여 클라이언트가 언제 연결을 설정했는지, 룸에 참여했는지 등을 알려줍니다.
예:IConnectionCallbacks.OnConnectedToMaster
.
편의를 위해 PUN에는 MonoBehaviourPunCallbacks
MonoBehaviour가 있습니다. 이것은 중요 콜백 인터페이스를 구현하고 자동으로 등록하므로 사용자는 콜백 인터페이스를 상속하여 특정 콜백 메소드를 재정의할 수 있습니다.
C#
// ...
public class YourClass : MonoBehaviourPunCallbacks
{
// ...
public override void OnConnectedToMaster()
{
Debug.Log("OnConnectedToMaster() was called by PUN.");
PhotonNetwork.JoinRandomRoom();
}
// ...
}
// ...
클래스에서 선택적으로 IConnectionCallbacks
을 구현하고 PhotonNetwork.AddCallbackTarget
를 통해 콜백용으로 인스턴스를 등록합니다.
매치메이킹
OnConnectedToMaster
내에서 기존에 있는 룸에 참여하거나 룸을 생성할 수 있습니다.
다음 코드는 게임을 시작하거나 참여하기 위한 메소드 가능한 호출을 나타냅니다.
C#
// Join room "someRoom"
PhotonNetwork.JoinRoom("someRoom");
//Fails if "someRoom" is not existing, closed or full. Error callback: IMatchmakingCallbacks.OnJoinRoomFailed
C#
// Tries to join any random game:
PhotonNetwork.JoinRandomRoom();
//Fails if there are no open games. Error callback: IMatchmakingCallbacks.OnJoinRandomFailed
C#
// Create this room.
PhotonNetwork.CreateRoom("MyMatch");
// Fails if "MyMatch" room already exists and calls: IMatchmakingCallbacks.OnCreateRoomFailed
친구들이 같이 플레이하기를 원하고 PUN 외부(Photon Chat 페이스북 등)에서 소통할 방법을 가지고 있을 때, 룸 이름을 만들어 JoinOrCreateRoom
을 사용할 수 있습니다.
이 룸에 매치되는 플레이어가 아무도 없어야한다면, 매치메이킹에서 보이지 않도록 하십시오.
C#
RoomOptions roomOptions = new RoomOptions();
roomOptions.IsVisible = false;
roomOptions.MaxPlayers = 4;
PhotonNetwork.JoinOrCreateRoom(nameEveryFriendKnows, roomOptions, TypedLobby.Default);
JoinOrCreateRoom
을 통해, 룸은 필요시 생성되므로 누가 먼저인지는 문제되지 않습니다. 만약 룸이 가득찼다면 IMatchmakingCallbacks.OnJoinRoomFailed
가 호출됩니다(구현하고 어디인가 등록해놓았다면)
매치메이킹에 대해서는 당사의 지침서를 읽어 주십시오.
게임 로직
GameObject들은 PhotonView
컴포넌트에서 "networked GameObjects" 로써 인스턴스화될 수 있습니다. 객체와 소유자(또는 컨트롤러)를 식별합니다. 제어를 하고 있는 플레이어가 다른 모든 사용자를 업데이트합니다.
전형적으로, PhotonView
를 프리팹에 추가하여 Observed
컴포넌트를 선택하고 인스턴스 생성을 위해 PhotonNetwork.Instantiate
를 사용할 수 있을 것 입니다.
PhotonView
의 Observed 컴포넌트는 초당 몇 회의 네트워크 객체 상태의 쓰기(그리고 읽기)에 책임을 갖고 있습니다. 이렇게 하기 위해서는, 스크립트는 반드시 OnPhotonSerializeView
를 정의하는 IPunObservable
을 구현해야 하는데, 다음과 같습니다:
C#
// used as Observed component in a PhotonView, this only reads/writes the position
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
}
}
클라이언트는 특정 네트워크 객체상에 때로 발생하는 모든 것에 대하여 원격 프로시져 호출을 할 수 있습니다.
C#
// defining a method that can be called by other clients:
[PunRPC]
public void OnAwakeRPC(byte myParameter)
{
//Debug.Log(string.Format("RPC: 'OnAwakeRPC' Parameter: {0} PhotonView: {1}", myParameter, this.photonView));
}
C#
// calling the RPC somewhere else
photonView.RPC("OnAwakeRPC", RpcTarget.All, (byte)1);
GameObjects와는 별개로, 나만의 이벤트를 전송할 수도 있습니다:
C#
PhotonNetwork.RaiseEvent(eventCode, eventContent, raiseEventOptions, SendOptions.SendReliable);
PUN의 RPC와 RaiseEvent에 대해 더 알아보기를 읽어주십시오.
데모와 자습서
PUN 패키지에서, 재사용 또는 분석하여 다시 사용할 수 있는 몇 개의 데모와 유용한 스크립트를 찾을 수 있습니다.
올바르게 시작하려면, "PUN 기본 자습서" 를 잘 읽어 보고 코드를 잘 분석해 보십시오.
Back to top