본문 바로가기

1일 1 구현7

[1일 1 구현] Managers.cs Managers - 모든 매니저를 총괄하는 GameObject 본격적인 구현에 앞서 각종 매니저들의 싱글톤 구현 코드가 너무 날 것이고 하이어라키에 여러개의 매니저가 올라와 있는게 보기가 싫었다.그래서 하나의 GameObject에 모든 Manager를 담는 방식으로 구현한다. - Rookiss 참고. 구현 코드using System.Collections;using System.Collections.Generic;using UnityEngine;public class Managers : MonoBehaviour{ static Managers s_instance; static Managers Instance { get { Init(); return s_instance; } } #region .. 2024. 6. 4.
[1일 1 구현] PoolManager - 2 📌PoolManager 구현 코드 public class PoolManager : MonoBehaviour{ public static PoolManager Instance; private Dictionary _pools = new Dictionary(); private void Awake() { if (Instance == null) { Instance = this; DontDestroyOnLoad(gameObject); } else Destroy(gameObject); } public GameObject GetFromPool(GameObject origi.. 2024. 5. 18.
[1일 1 구현] PoolManager - 1 📌오브젝트 풀링게임에선 거의 필수라고 보는 최적화 기법 중 하나...개인적으로 할 땐 많이 사용해 봤는데 생각해 보니 캠프 중에 직접 구현해서 사용해 본 적이... 없는 것 같았다. 그래서 구현해보는 오브젝트 풀링 준비물TestPrefabRandomSpawner.csTestSpawnObject.cs 📌풀링 적용 전무작정 테스트프리팹을spawnDelay초가 지난 뒤 countPerSpawn 수만큼 spawnOffset 크기의 구 안에 랜덤 생성 후 1초 뒤 파괴한다.0.05초에 20개씩 생성, 각 오브젝트는 1초마다 파괴를 반복해보자 이런 느낌인데 before after 느낌으로 극적인 세팅을 해보자0.01초에 100개 생성  프레임저하 + GC 둘 다 확연히 늘었다  그렇다면 이제 ObjectPool.. 2024. 5. 16.
[1일 1 구현] 코드 정리 및 공통 클래스 UI_Base 정리FindChild 메서드는 공용으로 쓰일 수 있으니 Util 전역 클래스를 생성해 이전Bind, Get 메서드를 쓸 때 타입 특화 메서드로 가독성과 사용성을 높였다.enum은 UI_Base에서는 쓰지 않으니 삭제했다.UI_Base를 추상클래스로 만들어 상속받는 클래스에서 Init 메서드를 강제했다.public abstract class UI_Base : MonoBehaviour{ protected Dictionary _dict = new Dictionary(); protected abstract void Init(); private void Awake() { Init(); } protected void Bind(Type type) where .. 2024. 5. 15.
[1일 1 구현] UI Base [Rookiss UI_Base를 참고하였음]오늘 구현해볼 것 : UI_Base.cs UI_BaseUI_Base 클래스의 역할은 다음과 같다.모든 UI의 부모 클래스 역할을 한다.사용할 컴포넌트를 캐싱할 수 있다.public class UI_Base : MonoBehaviour{ // To Do // 사용할 컴포넌트들을 캐싱해둘 자료구조 // 컴포넌트 Bind // 컴포넌트 Get } 캐싱해둘 자료구조를 정해야 하는데 UI의 컴포넌트라면 Button, Text, InputField, Image 등등 다양하게 있다.List나 배열로 하기에는 여러 타입의 자료구조를 각각 만들어야 하니 패스. Dictionary 의 value를 UnityEngine.Object[] 로 담으면 같은 컴.. 2024. 5. 13.
[1일 1 구현] UI Manager Rookiss 님의 UIManager를 기반으로 작성📌 구현 이유팀 프로젝트 Null Reference Exception을 만들며 구성했던 UI 구조가 마구잡이로 섞임Rookiss 식으로 만들면 생성/제거 이 두 기능밖에 안 하지만 Active(true/false) 기능까지 넣어서 이도저도 아니게 돼버림Rookiss 식 + [serializefield] 어트리뷰트를 사용하는 드래그 드롭 방식도 씀유저 피드백 중 ESC 키로 이전 UI 또는 Popup 끄기 키를 넣어달라는 요청 해결 못함기왕 따라 쓸 거라면 100% 이해를 하는 게 맞다고 생각내가 원하는 기능으로 커스텀할 수 있도록 📌 구현할 기능UIManager.csUIBase.cs팝업 UI (모바일게임의 이벤트 UI, 알림 팝업 등)연결 UI ([.. 2024. 5. 13.
[1일 1구현] 시작 📌 시작하며 ❔ 왜 1일 1 구현 프로젝트를 시작하는가서비스 중인 대형 게임사들의 게임들을 보며 "저건 어떻게 구현했을까?"를 자주 생각하곤 한다.뇌내망상으로 "이렇게 구현했겠지?" "저건 이렇게 하면 되지 않을까?" 하는 것들도 있지만정말 어려워 보이는 구현들은 상상할 엄두조차 나지 않는 것들도 많다.문제는 생각만 하는 것과 생각조차 하지 않는 것 둘 다 좋지 못하다는 판단을 했다.개발 입문을 시작하면서 1인 개발이나 팀 프로젝트 등에서 기획을 내며 직접 구현을 해보기도 하고 어려운 것들은 참고 영상이나 자료들을 봐가며 만들었다.결과적으로 어느 정도 구현해 본 것들이 생기긴 했지만 가장 근본적인 문제가 해결이 안 된 것 같았다."그래서 정말 내 것이 되었을까?"이 문제를 해결하기 위해 정확히 내가 구.. 2024. 5. 12.