글로벌 크로스 플랫폼 실시간 게임 개발 | Photon Engine

로그인 후 관리 화면으로 이동 후 새 어플리케이션 만들기를 하여 Photon 종류 , 이름을 필수로 작성 후 작성하기를 누릅니다.

만든 프로젝트에서 어플리케이션 ID를 복사합니다.
복사하는 이유는 유니티에서 프로젝트 셋업을 하기 위해 사용할 것입니다.
창을 닫았을 시 홈페이지에서 로그인 후 관리 화면으로 이동을 눌러주시면 됩니다.

유니티 프로젝트를 만들어 줍니다. (2D, 3D 가리지 않습니다.)
프로젝트 이름은 마음대로 하시면 됩니다.

Window - AssetStore 에 PUN2 - FREE or Photon 2을 검색(띄워쓰기까지)하여 들어가서 다운로드 후 Import를 눌러 패키지를 임포트

임포트 후 밑에 창이 뜸 Appld or Email에 복사한 앱 ID를 넣어주고 Setup Project를 클릭 후 Close를 클릭

- 아래 설명은 안뜰 시 or 다른 방법 -
Window > Photon Unity Networking > Highlight Server Settings로 이동하여 열고
Server/Cloud Settings > App ID Reatltime에 앱 ID를 넣으면 됨
-------------------------------------------
PhotonLauncher
Create - PhotonLauncher 씬, 스크립트 하이라키에서 빈 오브젝트를 만든다. (이름은 변경 가능)
스크립트 PhotonLauncher.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Photon.Pun;
using Photon.Realtime;
public class PhotonLauncher : MonoBehaviourPunCallbacks
{
[SerializeField] private string gameVersion = "0.0.1";
[SerializeField] private byte maxPlayerPerRoom = 4;
[SerializeField] private string nickName = string.Empty;
[SerializeField] private Button connectButton = null;
private void Awake()
{
// 마스터가 PhotonNetwork.LoadLevel()을 호출하면,
// 모든 플레이어가 동일한 레벨을 자동으로 로드
PhotonNetwork.AutomaticallySyncScene = true;
}
private void Start()
{
connectButton.interactable = true;
}
// ConnectButton이 눌러지면 호출
public void Connect()
{
if(string.IsNullOrEmpty(nickName))
{
Debug.Log("NickName is empty");
return;
}
if (PhotonNetwork.IsConnected)
{
PhotonNetwork.JoinRandomRoom();
}
else
{
Debug.LogFormat("Connect : {0}", gameVersion);
PhotonNetwork.GameVersion = gameVersion;
// 포톤 클라우드에 접속을 시작하는 지점
// 접속에 성공하면 OnConnectedToMaster 메서드 호출
PhotonNetwork.ConnectUsingSettings();
}
}
// InputField_NickName과 연결해 닉네임을 가져옴
public void OnValueChangedNickName(string _nickName)
{
nickName = _nickName;
// 유저 이름 지정
PhotonNetwork.NickName = nickName;
}
public override void OnConnectedToMaster()
{
Debug.LogFormat("Connected to Master: {0}", nickName);
connectButton.interactable = false;
PhotonNetwork.JoinRandomRoom();
}
public override void OnDisconnected(DisconnectCause cause)
{
Debug.LogWarningFormat("Disconnected: {0}", cause);
connectButton.interactable = true;
// 방을 생성하면 OnJoinedRoom 호출
Debug.Log("Create Room");
PhotonNetwork.CreateRoom(null, new RoomOptions { MaxPlayers = maxPlayerPerRoom });
}
public override void OnJoinedRoom()
{
Debug.Log("Joined Room");
}
public override void OnJoinRandomFailed(short returnCode, string message)
{
Debug.LogErrorFormat("JoinRandomFailed({0}): {1}", returnCode, message);
connectButton.interactable = true;
Debug.Log("Create Room");
PhotonNetwork.CreateRoom(null, new RoomOptions { MaxPlayers = maxPlayerPerRoom });
}
}