자료실

[Photon엔진강좌] 초보자도 쉽게 할 수 있는 포톤 유니티 네트워크 (PUN) 튜토리얼 4 기초편
작성자 | admin 2020-09-14  |    조회수 : 3133  


자 이제 모든 준비는 끝났습니다!

이제 PUN(포톤 유니티 네트워크)에 접속할 준비를 하겠습니다.



먼저 시작 전에


GameManager
GameManager.Char
GameManager.War
GameManager.ETC 4개의 스크립트에서
public partial class GameManager: MonoBehaviour 상속을 모두
public partial class GameManager: Photon.MonoBehaviour
이렇게 고쳐주세요. 그럼 이제 시작합니다~

Project 에서 Scripts > Puzzle 밑에 GameManager.PhotonLobby 스크립트 파일을 만들어주세요.




그다음 MonoDevelop 으로 넘어가서
GameManager.PhotonLobby 를 이렇게 코딩해 줍니다~^^
//------------------------------------------------------------------------------
using UnityEngine;
using UnityEngine.UI;
using System.Collections.Generic;
using System.Collections;

public partial class GameManager : Photon.MonoBehaviour {

void AwakePhotonConnect () {
// GameManager 스크립트의 Awke()에서 호출

PhotonNetwork.ConnectUsingSettings ("1.0");
//포톤 네트워크에 접속한다.
}

public void BtnJoinRandomRoom(){ // 랜덤방에 접속한다.
if (PhotonNetwork.JoinLobby ()) { // 로비에 접속하면
PhotonNetwork.JoinRandomRoom (); //랜덤방에 접속한다.
} else { // 로비에 접속이 실패하면
BtnJoinRandomRoom (); // 다시 랜덤방에 접속한다.
}
}

public void OnPhotonRandomJoinFailed(object[] codeAndMsg)
{ // 랜덤방이 없어서 접속에 실패하면
Debug.Log ("OnPhotonRandomJoinFailed");
PhotonNetwork.CreateRoom(null, new RoomOptions() { MaxPlayers = 2}, null); // 스스로 방을 만든다.
}

void OnJoinedRoom(){ // 방에 접속했다.
Debug.Log ("OnJoinedRoom");

// PhotonGameSetting (); // 게임 셋팅
// 다음 튜토리얼에서 실행해 줍니다.

}

void OnJoinedLobby(){
Debug.Log ("JoinedLobby:"); // 로비에 접속했다.
}

}
//-------------------------------------------------------------------------------


하나씩 살펴볼까요~? 코드가 무척 간단하네요~ 함수가 4개 밖에 안됩니다.

void AwakePhotonConnect () {
// GameManager 스크립트의 Awke()에서 호출

PhotonNetwork.ConnectUsingSettings ("1.0");
// 포톤 네트워크에 접속한다는 뜻입니다.
}

AwakePhotonConnect ()는 포톤 네트워크에 접속한다는 뜻입니다.
GameManager 스크립트의 void Awake() 에서 호출하겠습니다. ^^

GameManager.PhotonLobby -> GameManager 스크립트로 넘어갑니다. 그 다음 다음과 같이 코드를 추가해 줍니다.

public partial class GameManager : Photon.MonoBehaviour {
void Awake () {

AwakeCharSetup (); // GameManager.Char 캐릭터 셋팅
AwakePhotonConnect (); // PhotonNetwork 접속

...............
...............
...............
}

그리고 포톤 네트워크에 접속했는지는 PhotonNetwork.connected 를 통해서 알 수 있습니다.

GameManager 스크립트의 void Update() 함수에 다음과 같은 코드를 넣어줍니다.
void Update () {

........................
........................
........................

if (PhotonNetwork.connected) {
Debug.Log ("connected");
} else {
Debug.Log ("disconnected");
}

}

게임을 실행하면 디버그에 다음과 같이 보이게 됩니다.


https://blog.naver.com/PostList.nhn?from=postList&blogId=jbaeg&categoryNo=0¤tPage=3#" 포톤 네트워크에 접속했다는 것이 보입니다.

다음은 BtnJoinRandomRoom() 함수입니다.

public void BtnJoinRandomRoom(){ //랜덤방에 접속한다.
if (PhotonNetwork.JoinLobby ()) { // 로비에 접속을 하면
PhotonNetwork.JoinRandomRoom ();
} else { // 로비에 접속이 실패하면
BtnJoinRandomRoom (); //다시 접속시작
}
}

유니티 상에서 버튼을 누르면 바로 이 함수를 통해 랜덤으로 방을 찾아서 게임에 접속하게 됩니다. 바로 여기서 네트워크상으로 접속하는 것입니다!!

그런데 로비에 접속을 했는데 방이 한개도 없으면 어떻게 될까요?

그러면 우리는 새로운 방을 만들어서 다른 유저를 기다려야 되겠죠?!

public void OnPhotonRandomJoinFailed(object[] codeAndMsg)
{
Debug.Log ("OnPhotonRandomJoinFailed");
RoomOptions RO = new RoomOptions ();
RO.MaxPlayers = 2; // 방에 최대 접속인원 2명
PhotonNetwork.CreateRoom (null, RO, null); // 방만들기
}
이렇게 접속이 실패하면 유저가 2명이 들어갈 수 있는 방을 만들게 됩니다!!

나중에 게임을 실행하면 접속이 실패했다는 메시지가
Debug.Log ("OnPhotonRandomJoinFailed");
뜨면서 방을 새로 만들게 될 것입니다.

그러면 이제 다 끝났습니다. 우리는 방에 접속할 것입니다!!
void OnJoinedRoom(){ // 방에 접속했다.
Debug.Log ("OnJoinedRoom");
// PhotonGameSetting (); // 게임 셋팅
// 이것은 잠시 주석 처리하겠습니다. 다음 튜토리얼에서 실행해 줍니다.}

만세!! 자 이제 방에 접속하는 것도 모두 끝났습니다!


그리고 이 함수는 로비에 접속했다는 것을 보여주는 함수입니다.

void OnJoinedLobby(){
Debug.Log ("JoinedLobby:");
}

이제 Save All 를 누른 후 다시 유니티로 돌아갑니다.

그리고 Scene 화면에서 Canvas에서 BtnJoin 버튼을 찾아줍니다.
그다음 버튼의 On Click 에 Hirerarchy 의 GameManager 를 넣어준 후
BtnJoinRandomRoom 함수를 연결해 줍니다~


https://blog.naver.com/PostList.nhn?from=postList&blogId=jbaeg&categoryNo=0¤tPage=3#" 그러면 이제 네트워크에 접속할 준비가 모두 끝났습니다!!

이제 게임을 실행하여 오른쪽 하단의 Join 버튼을 눌러주면~~~


https://blog.naver.com/PostList.nhn?from=postList&blogId=jbaeg&categoryNo=0¤tPage=3#" 다음과 같은 로그가 뜨게 됩니다.

1. JoinedLobby 로비에 접속했다.
2. OnPhotonRandomJoinFailed 방에 접속하는데 실패했다.
3. CreateRoom 방을 새로 만든다.
4. OnJoinedRoom 방에 접속했다.

만세~!! 방을 만들고 방에 접속하는데 성공했습니다!!


그럼 PhotonGameSetting () 함수의 주석을 해제하고 다음 튜토리얼로 넘어가겠습니다. ^^

void OnJoinedRoom(){ // 방에 접속했다.
Debug.Log ("OnJoinedRoom");

PhotonGameSetting (); // 게임 셋팅 주석 해제

}

이제 거의 다 왔습니다. 잠시 쉬었다가 다시 시작해 볼까요?

★더 많은 글은Photon HelpCenter
https://support.photonengine.jp/hc/ko/categories/204651467 에서 확인하세요!
★Photon 공식 홈페이지
https://www.photonengine.com/ko-kr/Photon