• 티스토리 홈
  • 프로필사진
    SiJun-Park
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
SiJun-Park
  • 프로필사진
    SiJun-Park
    • 분류 전체보기 (121)
      • Unity (80)
        • RPG Project (39)
        • FPS Project (30)
        • 기타 - 개발 (11)
      • 개발 (35)
        • 임베디드 소프트웨어 (7)
        • 컴파일러 (6)
        • 기계학습 (8)
        • 보안 (8)
        • 그래픽스 (2)
        • 그 외 (4)
      • 코딩문제 (5)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • [Photon] 로비 및 방 생성
        2025년 05월 10일
        • SiJun-Park
        • 작성자
        • 2025.05.10.:53

        https://sijun1191.tistory.com/110

         

        [Photon] 회원가입 및 로그인

        Playfab과 Photon을 이용해서 회원가입을 만들 예정이다. https://assetstore.unity.com/packages/p/pun-2-free-119922 PUN 2 - FREE | 네트워크 | Unity Asset StoreGet the PUN 2 - FREE package from Photon Engine and speed up your game developme

        sijun1191.tistory.com

        위의 글을 이어서 이번에는 로비와 방을 생성하는 것을 구현 하였습니다.

         

        Lobby Scene

        위와 같이 로비를 구성 하였습니다.

         

        Scroll View를 이용해서 방을 생성하면 알맞게 버튼 형식의 방을 생성하도록 하였습니다.

         

        방을 만들기 위해서는 Room Name InputField와 Capacity InputField를 이용해서

         

        방의 이름, 방의 수용량을 적은 후 방을 생성 하도록 구현을 하였습니다.

         

        ROOM Button

        Scroll View에 뜰 Room의 버튼 입니다.

         

        이름(현재 인원 / 전체 수용량)을 표시하도록 하였습니다.

         

            private string RoomName;
            [SerializeField] Text RoomTitleText;
            
            public void OnEnterRoom() => PhotonNetwork.JoinRoom(RoomName);
            public void SetData(string roomName, int CurrentCount, int MaxCount)
            {
                RoomName = roomName;
                RoomTitleText.text = string.Format("{0} ( {1} / {2} )", roomName, CurrentCount, MaxCount);
            }

         

        버튼 코드 입니다.

         

        버튼을 클릭하면 해당 방에 접속하도록 하였고, 방을 생성하면 정보가 필요하니 SetData라는 함수를 만들어서

        버튼 안의 텍스트를 변경하도록 하였습니다.

         

            public void Start() => PhotonNetwork.ConnectUsingSettings();
            public override void OnJoinedRoom() => Debug.Log("조인!");
        
            public override void OnConnectedToMaster()
            {
                PhotonNetwork.JoinLobby(
                    new Photon.Realtime.TypedLobby(
        
                        "ASIA",
                        LobbyType.Default
        
                        )
        
        
                    );
            }
            
            public void OnCreateRoom()
            {
                RoomOptions roomOptions = new RoomOptions();
                roomOptions.MaxPlayers = byte.Parse(RoomCapacityInputField.text);
                roomOptions.IsOpen = true;
                roomOptions.IsVisible = true;
                PhotonNetwork.CreateRoom(RoomNameInputField.text, roomOptions );
            }

        로비 씬으로 넘어오면 ConnectUsingSettings을 불러와서 OnConnectedToMaster를 연결 해줍니다.

        이때 새로운 로비를 만드니 아시아 서버로하고 타입을 default로 선언해주었습니다.

         

        OnCreateRoom은 앞서 언급을 하였듯이 InputField의 값을 받아와서 방을 생성해줍니다.

         

         

        public GameObject InstantiateRoom() => Instantiate(Resources.Load<GameObject>("Room"), Parent);
        
        public override void OnRoomListUpdate(List<RoomInfo> roomList)
        {
        
            GameObject roomPrefab;
        
            foreach (RoomInfo room in roomList)
            {
                if(room.RemovedFromList == true)
                {
                    // ROOM 이 삭제가 된 경우
                    DIC.TryGetValue(room.Name, out roomPrefab);
                    Destroy(roomPrefab);
                    DIC.Remove(room.Name);
                    
                }
                else
                {
                    // ROOM의 정보가 변경이 된 경우
        
                    if(DIC.ContainsKey(room.Name) == false)
                    {
                        // ROOM이 처음 생성이 된 경우
                        GameObject roomObj = InstantiateRoom();
        
                        roomObj.GetComponent<RoomButtonManager>().SetData(room.Name, room.PlayerCount, room.MaxPlayers);
                        DIC.Add(room.Name, roomObj);
                    }
                    else
                    {
                        DIC.TryGetValue((room.Name), out roomPrefab);
                        roomPrefab.GetComponent<RoomButtonManager>().SetData(room.Name, room.PlayerCount, room.MaxPlayers);
                    }
        
                }
            }
        }

        방이 생성이 된다면 Scroll View도 변화가 있어야하니 수정을 해주었습니다.

         

        만약에 방이 삭제가 된다면 해당 방을 파괴를 해줍니다.

         

        그게 아니고 처음으로 방을 만들었다면 새롭게 버튼을 생성해주고 SetData의 값을 넘겨주어 값을 설정해줍니다.

         

        그것이 아니라 방안에서 수정을 할 수 있으니, 방안에서 수정을 한다면 업데이트를 해줍니다.

        아이디와 비밀번호를 입력 후 로그인을 해줍니다.

         

         

        그러면 로비 씬으로 넘어와집니다.

        방 제목과 인원을 입력 후 방을 생성을 합니다

        방을 생성하는 동시에 방에 입장을 하게 됩니다.

        다른 유저의 화면에서는 위와 같은 방이 만들어져서 버튼이 보이게 됩니다.

         

        'Unity > FPS Project' 카테고리의 다른 글

        [Photon] 애니메이션 동기화 및 UI 분리  (0) 2025.05.16
        [Photon] 유저 입장 및 동기화  (0) 2025.05.14
        [Photon] 회원가입 및 로그인  (0) 2025.05.08
        FPS Project - 12 [ 맵 수정 및 몬스터 소환 ]  (0) 2025.05.02
        FPS Project - 11 [ 점프 오류 수정 ]  (0) 2025.04.18
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바