ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [유니티]포톤클라우드 로비 접속
    Development/Unity3d 2017. 2. 22. 00:00
    반응형


    테스트환경

     개발툴

    유니티 5.5.1

     운영체제

    Windows 10 64bit

     테스트

    2017-02-18






    지난 시간에 이어 오늘은 유니티에서 게임 로비로 접속하는 과정을 간단하게 살펴보겠습니다!



    살펴보기 전에 아래 링크에 나와있는 지난 서버구축편을 본 뒤에 따라해주세요~^^

    2017/02/17 - [Development/Unity3d] - [유니티]모바일 온라인 게임 제작기 #1 - 게임 클라우드 서버 구축하기




    모든 내용은 포톤 클라우드 홈페이지 문서에서 가져왔습니다.

    (https://doc.photonengine.com/ko-kr/pun/current/tutorials/pun-basics-tutorial/lobby-ui)



    1. 새로운 씬을 생성합니다.

    2. GameObject->UI->Button을 생성하고 이름은 'PlayButton'으로 지정합니다.

    3. 그럼 Canvas와 Panel이 생성되는데 Panel이름을 'Control Panel'로 지정합니다.

    4. 같은 Panel에 GameObject->UI->InputField를 생성하고 이름을 'NameInputField'로 지정합니다.

    5. 같은 Panel에 GameObject->UI->Text를 생성하고 이름을 'ProgressLabel'로 지정합니다.

    6. Hierarchy에 빈 오프젝트를 생성합니다. (Ctrl+Shift+N) 그리고 이름을 'Launcher'로 지정합니다.




    그럼 위 그림처럼 생성되었을 것입니다.


    7. Launcher.cs 스크립트를 만들고 다음과 같이 입력합니다.


    Launcher.cs

    using System.Collections;

    using System.Collections.Generic;

    using UnityEngine;


    namespace namespace com.myCompany.Games

    {

    public class Launcher : Photon.PunBehaviour {


    public PhotonLogLevel Loglevel = PhotonLogLevel.Informational;

    public byte MaxPlayersPerRoom = 4;

    [Tooltip("The Ui Panel to let the user enter name, connect and play")]

    public GameObject controlPanel;

    [Tooltip("The UI Label to inform the user that the connection is in progress")]

    public GameObject progressLabel;



    string _gameVersion = "1";


    void Awake()

    {

    //로그 레벨 상향

    PhotonNetwork.logLevel = Loglevel;


    //자동 로인 해제(현재 로비기능이 불필요하므로 룸에의 목록만 얻어오면 됨.)

    PhotonNetwork.autoJoinLobby = false;


    //같은 버전의 클라이언트끼리 로드할 수 있다.

    PhotonNetwork.automaticallySyncScene = true;

    }



    // Use this for initialization

    void Start () {

    progressLabel.SetActive(false);

    controlPanel.SetActive(true);

    }

    // Update is called once per frame

    void Update () {

    }


    public void Connect()

    {

    progressLabel.SetActive(true);

    controlPanel.SetActive(false);


    if (PhotonNetwork.connected) {

    PhotonNetwork.JoinRandomRoom ();

    else 

    {

       //이 게임이 네트워크를 통하여 Photon클라우드로 연결되는 시작점

    PhotonNetwork.ConnectUsingSettings (_gameVersion);

    }

    }



    public override void OnConnectedToMaster()

    {

    Debug.Log("DemoAnimator/Launcher: OnConnectedToMaster() was called by PUN");

    PhotonNetwork.JoinRandomRoom ();

    }

    public override void OnJoinedRoom()

    {

    Debug.Log("DemoAnimator/Launcher: OnJoinedRoom() called by PUN. Now this client is in a room.");

    }



    public override void OnDisconnectedFromPhoton()

    {

    progressLabel.SetActive(false);

    controlPanel.SetActive(true);

    Debug.LogWarning("DemoAnimator/Launcher: OnDisconnectedFromPhoton() was called by PUN");        

    }

    public override void OnPhotonRandomJoinFailed (object[] codeAndMsg)

    {

    Debug.Log("DemoAnimator/Launcher:OnPhotonRandomJoinFailed() was called by PUN. No random room available, so we create one.\nCalling: PhotonNetwork.CreateRoom(null, new RoomOptions() {maxPlayers = 4}, null);");


    // #Critical: we failed to join a random room, maybe none exists or they are all full. No worries, we create a new room.

    PhotonNetwork.CreateRoom(null, new RoomOptions() { maxPlayers = MaxPlayersPerRoom }, null);

    }


    }

    }



    8. PlayerInputField.cs 스크립트를 만들고 다음과 같이 입력합니다.



    PlayerInputField.cs

    using System.Collections;

    using UnityEngine.UI;

    using System.Collections.Generic;

    using UnityEngine;


    namespace com.myCompany.Gamesl{


    [RequireComponent(typeof(InputField))]

    public class PlayerNameInputField : MonoBehaviour

    {


    // Store the PlayerPref Key to avoid typos

    static string playerNamePrefKey = "PlayerName";




    void Start () {


    string defaultName = "";

    InputField _inputField = this.GetComponent<InputField>();

    if (_inputField!=null)

    {

    if (PlayerPrefs.HasKey(playerNamePrefKey))

    {

    defaultName = PlayerPrefs.GetString(playerNamePrefKey);

    _inputField.text = defaultName;

    }

    }


    PhotonNetwork.playerName =    defaultName;

    }




    public void SetPlayerName(string value)

    {

    // #Important

    PhotonNetwork.playerName = value + " "; // force a trailing space string in case value is an empty string, else playerName would not be updated.


    PlayerPrefs.SetString(playerNamePrefKey,value);

    }



    }

    }



    9. Launcher 오브젝트에 Launcher.cs 스크립트를 넣고 다음과 같이 드래그해서 설정합니다.






    10. NameInputField에는 PlayerNameInputField.cs 스크립트를 넣습니다.

    11. NameInputField 오브젝트의 InputField(Script)에 다음과 같이 컴포넌트를 추가하고 설정합니다.



    12. PlayButton의 Button 스크립트에도 다음과 같이  '+'를 눌러 설정해줍니다.





    <실행 후 접속 전 화면>

    (클릭하면 원본 크기로 보실 수 있습니다.)





    <실행 후 접속 후 화면>

    로그를 보시면방에 접속된것을 알 수 있습니다~!

    (클릭하면 원본 크기로 보실 수 있습니다.)


    반응형

    댓글

Designed by Tistory.