티스토리 뷰

01.12

  • 타이틀씬 완성
    • 게임 시작하기 버튼 누르면 다음 ConnectScene으로 이동함. TitleUI 스크립트에서 SceneManager.LoadScene("ConnectScene"); 이용
    • 배경 및 버튼들 UI 프리팹화함.
    • 게임 방법 버튼은 아직 안함.


1월 13, 14일

요약:

  • 작업: 방 만들기/참여 필수 UI 배치, ConnectSceneManager 스크립트 작성, 버튼-Inspector 레퍼런스 연결
  • 검증: 중간 빌드로 Room List 생성 확인 시도 → RoomItem 생성 안 됨
  • 이슈 원인: NetworkManager → ConnectSceneManager로 리네임하면서 씬 오브젝트 인스펙터 레퍼런스들이 초기화/미연결 상태
  • 해결: 인스펙터 레퍼런스 전부 재연결 후 정상 작동 확인
  • 메모(협업): 인스펙터 연결 누락 시 RoomList/UI 갱신이 안 될 수 있음(씬 오브젝트 참조 확인 필요)

1월 15일

  • 테스트: 방 생성자 + 참여자 버튼으로 같은 룸 입장되는지 확인 → 성공
  • PlayerList 확인: 임시 Scene_Lobby에 Text로 출력, Unity 실행/빌드 둘 다 입장 확인

구체:

  • Scene_Connect 방 만들기, 방 참여하기 에 필요한 필수 UI들 배치
  • ConnectSceneManager 스크립트 작성, 각 버튼에 필요한 Inspector들 연결
    중간 빌드해서 룸 리스트 생기는지 확인->안 생김, 실패.

  • 원인 찾음(NetworkManager -> ConnectSceneManager로 이름 바꾸면서 초기화된 이 오브젝트의 인스펙터에 다 연결이 안됐던 것..!ㅠㅠ) 인스펙터 다 연결 후 정상 작동.
    • (의문점: 과연 인스펙터에 연결시키는 것들이 많아도 협업하는데 괜찮을지...? 혹시나 깃에서 머지할 때 충돌이라도 나면 일일이 다 연결시켜야 하는 건 아닌지(On Click() 함수 등) 걱정이 생김...)
    • 일단 프리팹화하는 식으로 해결하고, 코드에서 인스펙터 연결을 대신하도록 만들기.

  • 방 만든 사람과 갱신된 룸리스트에서 참여하기 버튼 누른 사람 한 방에 들어오는지 테스트 -> 확인
    • 임시로 만든 Scene_Lobby에 Text 오브젝트 붙여서 PlayerList에 Unity쪽, build쪽 모두 들어온 것 확인


1월 16일

요약 : 현재까지 짜놓은 구조는 버튼마다의 OnClick()이 매니저를 직접 물고 있다.

→ 지피티에게 물어보니 협업/유지보수 편하게 하려면 버튼 바인딩을 코드에서 하는 쪽이 안전하다고 한다.

→ 버튼 이벤트를 코드 바인딩으로 바꾸기로 함.

  1. ConnectUIRoot 에 붙일 ConnectUIBinder 스크립트 작성 및 붙이기

ConnectUIBinder

using UnityEngine;
using UnityEngine.UI;

public class ConnectUIBinder : MonoBehaviour
{
    [Header("NickName")]
    public InputField nickNameInput;

    [Header("Top Buttons")]
    public Button btnBack;
    public Button btnSettings;

    [Header("Start")]
    public Button btnStart;

    [Header("Create Room Buttons")]
    public Button btnCreateRoom;
    public Button btnPublic;
    public Button btnPrivate;

    [Header("Create Room Popup")]
    public GameObject createRoomPopup;
    public InputField roomNameInput;
    public Button btnConfirm;
    public Button btnCancel;

    [Header("Room List")]
    public Transform roomListParent; //Content. Scroll View / Viewport / Content 
    GameObject roomItemPrefab; //RoomItem prefab
}

 

인스펙터에 붙이는 것을 캔버스 하위에서 모두 모아볼 수 있도록 만들었다.


1월 19일 

늦게 접속한 유저에게 룸 리스트가 보이지 않던 문제 수정

  • 원인: RefreshRoomListUI()가 특정 조건(IF문) 하에서만 호출되고 있었음
  • 해결:
    • RefreshRoomListUI()를 조건문 없이
    • OnEnable()에서 항상 호출하도록 구조 변경
  • 결과:
    • 씬이 활성화될 때마다 룸 리스트가 정상적으로 갱신됨
    • 늦게 접속한 유저도 기존 방 목록을 문제없이 확인 가능
  • ConnectSceneManager.cs - OnEnable() 함수 부분
//오브젝트가 활성화될 때마다 호출(씬 진입, SetActive(true) 등)
    private void OnEnable()
    {
        //디버깅용
        if (NetworkManager.Instance == null)
        {
            Debug.LogWarning("[UI] NetworkManager.Instance is null on OnEnable");
            return;
        }

        // 중복 구독 방지
        NetworkManager.Instance.OnRoomListChanged -= RefreshRoomListUI;
        NetworkManager.Instance.OnRoomListChanged += RefreshRoomListUI;

        //이미 캐시에 방이 있으면 즉시 UI에 반영 <- 늦게 들어오면 안 보이는 오류 해결
        RefreshRoomListUI();
    }

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2026/03   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함