본문 바로가기
Development/Internship

[멋사 로켓단 인턴쉽] 4일차 - 일감 분배 및 작업 시작

by Mobics 2025. 8. 11.

목차


    멋쟁이사자처럼 로켓단 인턴쉽

    25.08.11

    회의록

    >> 안건

    • 업무 업데이트
      • 질문 혹은 피드백 요청
    • 주요 안건
      • 기능구현, 로직구체화 회의마무리
      • 선제작업 일감 선정 및 업무분담
    • 향후 마일스톤
      • 프로토타입 개발시작

     

    게임 UI 확정

    : 아래 사진과 같은 UI로 만들기로 결정했다.

    • 일과 시간을 시계로 표현
    • 일과 시간에 따라 흐른 Day 수를 탁상 달력으로 표현
    • 점수와 배율을 표시하고, 그 점수가 신기록이라면 위에 "New Record!" 가 표시된다.

     

    일감 분배

    : 우선 다음과 같이 일감을 생성했다.

    • 게임 진행 제어 (GameManager)
    • 서류, 장애물 SO제작
    • 서류 분류 판정
    • 아트 리소스 제작
    • UI 관리자 (UI Manager)
    • 시간제어 컨트롤 및 게임오버
    • 필수 UI배치
    • 메인화면UI

    --> 이 중에서 UI Manager를 만드는 일감을 분배받았다.

     

    UI Manager 만들기

    : 기존에 계획한 게임구조는 아래와 같다.

    --> UI Manager가 PanelController와 PopupController를 제어하고, 각 Controller에서 Panel과 Popup을 관리하도록 구현 예정

     

    >> 작성 중인 코드 (미완성)

    1. Singleton.cs

    : 다른 팀원 분께서 작성함

    using UnityEngine;
    using UnityEngine.SceneManagement;
    
    public abstract class Singleton<T> : MonoBehaviour where T : Component
    {
        private static T _instance;
    
        public static T Instance
        {
            get
            {
                if (_instance == null)
                {
                    _instance = FindObjectOfType<T>();
                    if (_instance == null)
                    {
                        GameObject obj = new GameObject();
                        obj.name = typeof(T).Name;
                        _instance = obj.AddComponent<T>();
                    }
                }
                return _instance;
            }
        }
    
        private void Awake()
        {
            if (_instance == null)
            {
                _instance = this as T;
                DontDestroyOnLoad(gameObject);
            }
    
            Initialize();
        }
    
        protected virtual void Initialize()
        {
        }
    }

     

    2. UIManager.cs

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class UIManager : Singleton<UIManager>
    {
        [SerializeField] private PanelController panelController;
        [SerializeField] private PopupController popupController;
    
        protected override void Initialize()
        {
            base.Initialize();
            
            // 초기화 로직
        }
    
        public void OpenPanel(GameObject panel) => panelController.OpenPanel(panel);
    }

     

    3. PanelController.cs

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class PanelController : MonoBehaviour
    {
        [Header("패널 관리")]
        [SerializeField] private GameObject mainPanel;
        [SerializeField] private GameObject gamePanel;
        [SerializeField] private GameObject pausePanel;
    
        private List<GameObject> panels;
    
        private void Awake()
        {
            panels = new List<GameObject> { mainPanel, gamePanel, pausePanel };
            OpenPanel(mainPanel);
        }
    
        public void OpenPanel(GameObject targetPanel)
        {
            foreach (var panel in panels)
            {
                panel.SetActive(panel == targetPanel);
            }
        }
    }

     

    4. PopupController.cs

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class PopupController : MonoBehaviour
    {
        [Header("팝업 관리")]
        [SerializeField] private GameObject tutorialPopup;
        [SerializeField] private GameObject resultPopup;
    
        private List<GameObject> popups;
    
        private void Awake()
        {
            popups = new List<GameObject> { tutorialPopup, resultPopup };
        }
    
        public void OpenPopup(GameObject targetPanel)
        {
            foreach (var panel in popups)
            {
                panel.SetActive(panel == targetPanel);
            }
        }
    
        public void ClosePopup()
        {
            
        }
    }