🔔 유튜브 크리에이터 고라니TV님의 유니티강의 2D 횡스크롤 멀티게임 만들기 를 보고 공부하여 작성한 게시글입니다! 🔔
이번시간에는 포톤(Photon)을 이용하여, 게임 접속 및 해제 기능을 구현해보려고 합니다.
🧷 1. UI 컴포넌트
- 초기 연결하는 패널
닉네임 입력 후, 닉네임에 따른 플레이어가 생성 됩니다.
- 플레이어 패배 후 재접속 패널
접속을 눌러 새로운 플레이어를 생성합니다.
🧷 2. 네트워크 스크립트
빈 오브젝트에 새로운 스크립트(NetworkManager)를 만들어 넣습니다.
(컴포넌트 Nickname Input은 플레이어 상단에 이름을 적을 UI 입니다.)
- 네트워크 매니저 스크립트
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;
using Photon.Realtime;
using UnityEngine.UI;
public class NetworkManager : MonoBehaviourPunCallbacks
{
public InputField NicknameInput;
public GameObject DisconnectPanel;
public GameObject RespwanPanel;
void Awake()
{
Screen.SetResolution(960, 540, false); // 화면 해상도
PhotonNetwork.SendRate = 60; // Server관련
PhotonNetwork.SerializationRate = 30;
}
public void Connect() => PhotonNetwork.ConnectUsingSettings();
public override void OnConnectedToMaster()
{
PhotonNetwork.LocalPlayer.NickName = NicknameInput.text;
PhotonNetwork.JoinOrCreateRoom("Room", new RoomOptions { MaxPlayers = 6 }, null);
}
public override void OnJoinedRoom()
{
Spwan();
DisconnectPanel.SetActive(false);
}
public void Spwan()
{
PhotonNetwork.Instantiate("Player", new Vector3(Random.Range(-6f, 18f), 4, 0), Quaternion.identity);
RespwanPanel.SetActive(false);
}
public override void OnDisconnected(DisconnectCause cause)
{
DisconnectPanel.SetActive(true);
RespwanPanel.SetActive(false);
}
}
Photon.Pun과, Photon.Realtime을 꼭 import 해줍니다.
Awake 구문
PhotonNetwork.SendRate : 초당 몇번이나 Photon Network가 패키지를 전송 해야 하는지 정의합니다.
PhotonNetwork.sendRateOnSerialize : PhotonViews 에서 초당 몇 번이나 OnPhotonSerialize이 호출되어야 하는지 정의합니다.
Connect()
접속 버튼을 누를 시, 실행하는 함수입니다.
PhotonNetwork.ConnectUsingSettings() : 에디터에서 설정된 Photon에 연결 합니다. 위의 포톤 서버에 접속합니다.
OnConnectedToMaster()
PhotonNetwork.LocalPlayer : 룸에 입장하기 전 커스텀 프로퍼티들이 설정될 수 있고 동기화가 됩니다.
PhotonNetwork.JoinOrCreateRoon : 지정된 이름의 룸에 입장합니다.
OnJoinedRoom 콜백이 호출 됩니다.
OnJoinedRoom ()
플레이어를 스폰해주는 Spwan() 함수와 패널을 관리하는 기능을 오버라이딩으로 추가해줍니다.
OnDisconnected()
콜백 함수인 disconnect가 되었을 시, UI를 관리해주는 기능을 추가했습니다.
출처: 고라니TV님 유튜브
https://www.youtube.com/watch?v=9Bn1C9O0hzY