Unity

[Unity] 클라이언트 기본구조 작성 순서

usingsystem 2022. 11. 29. 15:44
728x90
  • 사용 예상 폴더 생성

  • Managers Script생성
    • 전체적인 모든 Manager class관리
    • 싱글톤 구현
    • Init()에서 자식 Manager들 초기 세팅
    • Init()에서 Manager 오브젝트 생성 및 Manager 컴포넌트 연결
    • Clear()에서 모든 자식 Manager들 초기화
  • Popup UI 오브젝트 생성 및 Script 생성 
    • 오브젝트와 Script는 이름을 똑같이 맞춰준다.(Prefab자동화때 Script컨포넌트로 생성하기 위해)
    • Dictionary - Bind하여 오브젝트를 저장할 공간으로 사용
      • Dictionary<Type, UnityEngine.Object[]> _objects = new Dictionary<Type, UnityEngine.Object[]>(); 
    • Bind - Enum에 등록된 UI오브젝트 자식 명칭과 Type으로 자식 오브젝트를 찾아 Dic으로 관리한다.
      • void Bind<T>(Type type) where T : UnityEngine.Object
    • FindChild - 재귀형식으로 전달받은 컴포넌트를 찾을 건지 결정하여 자식오브젝트를 찾아 리턴해준다.
      •  GameObject FindChild(GameObject go, string name, bool recursiv = false)
      •  T FindChild<T>(GameObject go, string name, bool recursiv = false) where T : UnityEngine.Object
    • Get - Bind하여 Dictionary리로 관리되는 자식들을 가져온다.
      • T Get<T>(int idx) where T : UnityEngine.Object
      • Button GetButton(int idx)
      • Text GetText(int idx)
    • UI_EventHandler Script 생성 - UI공통으로 사용하는 이벤트 핸들러를 작성한다.
    • BindEvent - UI_EventHandler에서 어떤 이벤트를 등록할지 결정한다.
      • public void BindEvent(GameObject go, Action<PointerEventData> action, Define.UIEvent type = Define.UIEvent.Click)
  •  UI_Base Script 생성
    • UI 공통 함수를 정의 하는 부분이다.
    • Bind(), Get(), BindEvent() 이동
  • Utils Script 생성
    • FindChild이동
  • Extensions확장 Script 생성
    •  EventBind를 GameObject의 확장메서드로 등록한다.

  • ResourceManager Script 생성 (Prefab)
    • public T Load<T>(string path) where T : Object
    • public GameObject Instantiate(string path)
  • UIResourceManager Script 생성
    • UI 프리팹을 생성하며 자원을 관리하는 매니저
    • UI 자원에는 Popup, Screen, SubItem이 있다. 
    • UI_Popup, UI_Screen 생성하여 UI_Base를 상속
    • _sortOrder, _popups, _screen, Root 생성
    • SetCanvas() - 캔버스가 Popup인지 Screen인지에 캔버스 설정을 적용한다.
      • void SetCanvas(GameObject go, bool sort)
    • ShowPopupUI - 팝업 유아이 프리팹 생성
      • public T ShowPopupUI<T>(string name) where T : UI_Popup
    • ShowScreen - 스크린 유아이 프리팹 생성
      •  public T ShowScreen<T>(string name) where T : UI_Screen
    • ClosePopupUI - 팝업창 종료
      • public void ClosePopupUI()
    • AllClosePopupUI - 모든 팝업창 종료
      • public void AllClosePopupUI()
    •  Clear - UI 모두 제거하며 메인 매니저 Clear에서 호출
      •  public void Clear()
  • UI_Base Script 추상클래스로 변경 Init()정의
  • UI_Popup, UI_Screen Init 재정의
    • Init 재정의시 SetCavas를 호출하여 팝업인지 스크린인지 등록한다.

  • GameScene Script 생성
    • 프로그램의 시작점으로 모든 오브젝트를 생성을 담당한다.
    • 현재 ScreneType 저장
    • EventSystem 등록
  • BaseScene Script 생성
    • GameScene에서 만든 공용 함수 등록 EventSystem생성 및 Clear 및 SceneType 
    • start 말고 Awake에 Init 정의
  • SceneManagerEx Script생성
    • 씬간 이동에 있어 현재 씬을 관리하는 메니저이다.
    • Load, currentScene, Clear, GetSceneName
      • public void LoadScrene(Defines.Scene type)
      • string GetSceneName(Defines.Scene type)
      • public void Clear()

  • Poolable Script 생성
    • 오브젝트 풀링을 사용하는지 안하는지 유무만 판단
  • PoolManager Script 생성
    • Pool class 
      • Original, _stackPool, Root
      • Init() - Original, Root 정의 및 Poolable 생성
        • public void Init(GameObject original, int count = 5)
      • Create() - Poolable 생성
        •  public Poolable Create()
      • Push - Poolable 활성화 관리 및 부모 등록, 스택에 push
        • public void Push(Poolable poolable)
      • Pop - Poolabe 활성화 관리(Pop한 객체가 어느 부모에 표시될지) 및 스택 Pop
        • public Poolable Pop(Transform parent)
    • PoolManager 
      • Pool Dictionary로관리, 최상위 부모 root 관리
      • Init() - 최상위 부모 생성
        • public void Init()
      • CreatePool - Pool생성 
        • public void CreatePool(GameObject orginal, int count = 5)
      • push() - pool 이 없다면 받은 풀제거 있다면 push
        • public void Push(Poolable poolable)
      • Pop() - 넣을 풀이 없다면 새롭게 생성
        • public Poolable Pop(GameObject orginal, Transform parent = null)
      • Clear() - 최상위 부모의 자식모두 제거 dic clear
        • public void Clear()
728x90