-
[유니티]포톤클라우드 로비 접속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 스크립트에도 다음과 같이 '+'를 눌러 설정해줍니다.
<실행 후 접속 전 화면>
(클릭하면 원본 크기로 보실 수 있습니다.)
<실행 후 접속 후 화면>
로그를 보시면방에 접속된것을 알 수 있습니다~!
(클릭하면 원본 크기로 보실 수 있습니다.)
반응형'Development > Unity3d' 카테고리의 다른 글
[Unity3d]PC로 빌드했는데 exe 파일이 추출이 안될때 100% 해결방법 (1) 2019.11.03 [Unity3D]유니티 간편하게 로우폴리 맵 만들기(Low-Poly Map) (6) 2018.11.30 [유니티&PHP]현재시간 가져오기 (0) 2017.09.03 [Unity3D] PlayerPrefs 값이 존재하지 않을 때(=null) 조건문 (0) 2017.08.03 [Unity3d]XmlException: 'tools' is undeclared namespace. 에러 해결방법 (0) 2017.07.12 [Unity3d] csv파일을 파싱하여 프리팹 실전배치하기! (6) 2017.07.01 [Unity3d] C# 중복없는 난수 발생기 (0) 2017.06.14 유니티에서 안드로이드폰 디버깅(로그캣) 하기 (1) 2017.05.11 [유니티]포톤클라우드 서버구축 (3) 2017.02.17 [유니티]코드 편집 툴 변경하기 (0) 2017.02.16