포톤 접속하는 Lobby Manager 예시
- 방 이름 설정 및 그런거는 날리고 이름 입력해서 버튼 누르면 자동 접속 (인원은 4명 한정)
* MonoBehaviourPunCallBacks를 받아서 사용해야한다
콜백 함수들 이용할때에는 override해서 사용
using Photon.Pun; // 유니티용 포톤 컴포넌트들
using Photon.Realtime; // 포톤 서비스 관련 라이브러리
using UnityEngine;
using UnityEngine.UI;
// 마스터(매치 메이킹) 서버와 룸 접속을 담당
public class LobbyManager : MonoBehaviourPunCallbacks {
private string gameVersion = "1"; // 게임 버전
public Text connectionInfoText; // 네트워크 정보를 표시할 텍스트
public Button joinButton; // 룸 접속 버튼
[SerializeField] InputField inputField;
// 게임 실행과 동시에 마스터 서버 접속 시도
private void Start() {
// 접속에 필요한 정보(게임 버전) 설정
PhotonNetwork.GameVersion = gameVersion;
// 설정한 정보를 가지고 마스터 서버 접속 시도
PhotonNetwork.ConnectUsingSettings();
// 룸 접속 버튼을 잠시 비활성화
joinButton.interactable = false;
// 접속을 시도 중임을 텍스트로 표시
connectionInfoText.text = "마스터 서버에 접속중...";
}
// 마스터 서버 접속 성공시 자동 실행
public override void OnConnectedToMaster() {
// 룸 접속 버튼을 활성화
joinButton.interactable = true;
// 접속 정보 표시
connectionInfoText.text = "온라인 : 마스터 서버와 연결됨";
}
// 마스터 서버 접속 실패시 자동 실행
public override void OnDisconnected(DisconnectCause cause) {
// 룸 접속 버튼을 비활성화
joinButton.interactable = false;
// 접속 정보 표시
connectionInfoText.text = "오프라인 : 마스터 서버와 연결되지 않음\n접속 재시도 중...";
// 마스터 서버로의 재접속 시도
PhotonNetwork.ConnectUsingSettings();
}
// 룸 접속 시도
public void Connect() {
// 중복 접속 시도를 막기 위해, 접속 버튼 잠시 비활성화
joinButton.interactable = false;
if (string.IsNullOrEmpty(inputField.text))
{
inputField.text = "Player_" + Random.Range(0, 999).ToString();
}
PhotonNetwork.NickName = inputField.text;
// 마스터 서버에 접속중이라면
if (PhotonNetwork.IsConnected)
{
// 룸 접속 실행
connectionInfoText.text = "룸에 접속...";
PhotonNetwork.JoinRandomRoom(); //무작위 방 접속 시도
}
else
{
// 마스터 서버에 접속중이 아니라면, 마스터 서버에 접속 시도
connectionInfoText.text = "오프라인 : 마스터 서버와 연결되지 않음\n접속 재시도 중...";
// 마스터 서버로의 재접속 시도
PhotonNetwork.ConnectUsingSettings();
}
}
// (빈 방이 없어)랜덤 룸 참가에 실패한 경우 자동 실행
public override void OnJoinRandomFailed(short returnCode, string message) {
// 접속 상태 표시
connectionInfoText.text = "빈 방이 없음, 새로운 방 생성...";
// 최대 4명을 수용 가능한 빈방을 생성
PhotonNetwork.CreateRoom(null, new RoomOptions { MaxPlayers = 4 });
}
// 룸에 참가 완료된 경우 자동 실행
public override void OnJoinedRoom() {
// 접속 상태 표시
connectionInfoText.text = "방 참가 성공";
// 모든 룸 참가자들이 Main 씬을 로드하게 함
PhotonNetwork.LoadLevel("Main");
}
}
* 각자의 아이디 머리위에 출력
photon.owner.nickname 으로 올리면 간단
동기화가 필요한 오브젝트들은 photon view를 다 붙여줘야됨
자동으로 되어있는 Photon Transform View , Photon Animator View를 사용하면 간단하지만 약간의 지연이 생길 수 있음
728x90
반응형
'공부 > Unity' 카테고리의 다른 글
[Unity] Input System을 이용한 XR / VR / 모바일 등의 입력을 한번에 처리하는 방법 (0) | 2025.06.27 |
---|---|
[Unity] 컴포넌트 안쓰고 위치, 애니메이션 연동 (Oculus + Photon) (1) | 2025.06.24 |
[Unity] Oculus Integration / 컨트롤러 연결 및 조준선 표시 (2) | 2025.06.19 |
[Unity] 포톤 네트워크 / 채팅 스크립트 (0) | 2025.06.18 |
[Unity] NavMesh에서 랜덤한 포인트 얻기 (0) | 2025.06.16 |