유니티 포톤 방만들기 - yuniti poton bangmandeulgi

caLAB

Unity/유니티 개발

02. 포톤 네트워크 기본 구조 만들기(서버 연결, 방 만들기)

도이(doi) 2020. 9. 29. 00:49

유니티 포톤 방만들기 - yuniti poton bangmandeulgi
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun; //선언
using Photon.Realtime; //선언
using UnityEngine.UI; //선언

public class photonManager1 : MonoBehaviourPunCallbacks //클래스 상속
{
    public Text StatusText;
    public InputField NickNameInput;
    public InputField roomNameInput;
    public GameObject uiPanel;
    public byte userNum = 5;

    private bool connect = false;

    //현재 상태 표시 
    private void Update() => StatusText.text = PhotonNetwork.NetworkClientState.ToString();

    //서버에 접속
    public void Connect() => PhotonNetwork.ConnectUsingSettings();
    //연결 되면 호출
    public override void OnConnectedToMaster()
    {
        print("서버접속완료");
        string nickName = PhotonNetwork.LocalPlayer.NickName;
        nickName = NickNameInput.text;
        print("당신의 이름은 " + nickName + " 입니다.");
        connect = true;
    }

    //연결 끊기
    public void Disconnect() => PhotonNetwork.Disconnect();
    //연결 끊겼을 때 호출
    public override void OnDisconnected(DisconnectCause cause) => print("연결끊김");

    //방 입장
    public void JoinRoom()
    {
        if(connect)
        {
            PhotonNetwork.JoinRandomRoom();
            uiPanel.SetActive(false);
            print(roomNameInput.text + "방에 입장하였습니다.");
        }
    }

    //랜덤 룸 입장에 실패하면 새로운 방 생성 (master 방 생성)
    public override void OnJoinRandomFailed(short returnCode, string message) =>
    PhotonNetwork.CreateRoom(roomNameInput.text, new RoomOptions { MaxPlayers = userNum });

    //방에 입장 했을 때 호출 
    public override void OnJoinedRoom()
    => PhotonNetwork.Instantiate("player", Vector3.zero, Quaternion.identity);
}

오버라이드 : 자식클래스에서 부모클래스로부터 상속받은 부모의 메서드를 재정의하여 사용하는 것

콜 백 함수 on으로 시작하는 함수

식 본문 멤버 (bodied members expression) =>

동적 생성

유니티 포톤 방만들기 - yuniti poton bangmandeulgi

안녕하세요 유랑입니다.

오늘은 탱크를 이용한 네트워크 게임의 마지막날입니다.

벌써 여기까지왔네요.

방을 생성 후 리스트에서 방을 클릭하여 들어가는 기능까지 진행해 보겠습니다.

1. 방 여러 개 만들기

1-1) 입장 유무 적용하기

Levle01씬에 접속한 플레이어의 수를 보여줄 UI를 만들어 주세요.

로비로 갈 수 있는 버튼과 리스트 목록을 보여줄 Text가 있습니다.

GameMgr 스크립트에는 다음 내용을 추가하겠습니다.

- 방에 접속한 플레이어의 수

- 로비씬으로 갈 수 있는 기능

- 방을 접속하거나 나갔을 때의 알림 문구 기능

유니티 포톤 방만들기 - yuniti poton bangmandeulgi

Text와 버튼에 각각 기능을 적용 후 

게임실행을 통해 입장 유무 확인이 가능하답니다^^

1-2) 방 리스트 만들기

Lobby씬에는 방 리스트를 만들고 기능을 적용해 보겠습니다.

ScrollRect기능을 사용하여 방들이 추가될 때 차곡차곡 쌓이는 느낌을 넣을게요.

1-3) 방 이름 표현하기

RoomData 스크립트는 방 이름과 플레이어 수를 표현합니다.

아직 방에 이름을 적용하지 않았습니다.

UI는 다음과 같습니다.

Room은 프리팹으로 만들어서 플레이어가 방을 만들면 생성하는 방식으로 진행할게요.

1-4) 방 생성 후 게임 입장하기

마지막 스크립트입니다.

방들의 정보와 방을 클릭했을 때 게임 씬 적용 기능이 포함되어 있어요.

그리고 실시간 룸의 정보를 업데이트 시켜줍니다!!!

Room 프리팹에 ROOM이라는 태그값을 달면 완성입니다.

게임 실행을 통해서 확인해 보겠습니다^^

2. 마무리

오늘은 룸 리스트를 통한 게임 접속과 플레이어 수 적용까지 진행하였습니다.

아직 보완해야 될 점은 많지만 필수적인 포톤의 기능들은 배웠다고 생각합니다.

엉성한 저의 실력이기에 앞으로도 예제를 통해서 찾아 뵙겠습니다^^

감사합니다.

수업자료: https://github.com/YouRang12/-Tistory-Unity---Extra-Photon-