본문 바로가기

전체 글85

내일배움캠프를 마치며 2023년 7월 17일부터 시작한 사전캠프, 2023년 8월 7일부터 시작한 스파르타코딩클럽 내일배움캠프까지 5개월 간의 대장정이 끝났다. 캠프를 완료한 지는 거의 일주일이 되어가는데도 Unity 코리아 본사 방문이나 이력서 코칭 등등 후속 프로그램이 계속 이어져 너무나도 바쁜 와중에도 캠프에 대한 소회와 후기를 남겨보고자 한다. 처음 내일배움캠프를 하기로 결정한 이유 중 하나가 이전 수강생 분들의 블로그 후기였으니 내일배움캠프 합류를 고민하고 계셔서 이 글을 보시는 분들께 도움이 되었으면 좋겠다. 0. 캠프 합류 전 나는 뭐하는 사람? 작년에 참가했던 Maplestory Worlds SUPERHACKATHON 2022 기본 베이스는 조금 있었다고 봐도 무방하다.Unity와 매우 흡사한 인터페이스의 플랫.. 2023. 12. 21.
게임 디자인 패턴 17. MVC 패턴 (MVC Pattern) MVC 패턴으로 인벤토리 만들기MVC 패턴의 규칙 프로젝트를 하다보면 데이터 (Model) 가 따로 있고, 그 데이터를 조작하는 부분 (Controller) 이 따로 있고, 그것을 보여주는 부분 (View) 이 따로 있게 되는 경우가 많을 것이다. 이 세가지 사이의 관계를 정의하기가 힘들텐데, 이 때 주로 사용하는 마법 같은 방법 중 하나가 바로 이 MVC 패턴 (MVC, Model-View-Controller Pattern) 이 아닌가 싶다. 디자인 패턴 중에서는 가장 직관적인 패턴 중 하나라고 생각한다. 백문이 불여일견, 직접 MVC 패턴으로 된 예제를 보자. MVC 패턴으로 인벤토리 만들기 먼저, Model이 되는 데이터를 만들어 보는 것이다.using System.Collections.Generi.. 2023. 11. 20.
의존성 주입 (DI, Dependency Injection) 문제 상황?의존성 주입이 없는 방식의존성 주입 (Dependency Injection) 오늘 공부를 하다가 아주 충격적인 것을 알아버렸다. 바로 의존성 주입에 대한 이야기이다. 문제 상황? 내가 작업하던 부분은 바로 이런 부분이었다. MVC 패턴으로 작업을 하고 있는데, 이걸 클린 아키텍쳐로 구성하고 싶은 것이다. https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html 이걸 위해서는 참조 방향이 다음과 같아야 하는 것이다. View가 Controller를 참조하고, Controller가 Model을 참조해서 Controller가 Model의 값에 변경을 가해주면 View는 Model의 변경된 값을 Controller로부터 .. 2023. 11. 16.
Unity 스크립터블 오브젝트로 이벤트 시스템 만들기 스크립터블 오브젝트의 사용 방법 중 스크립터블 오브젝트로 이벤트 시스템을 만들어 관리할 수 있는 방법이 있어서 정리하고자 한다. 기본적으로 다음과 같이 선언한다.[CreateAssetMenu(fileName = "EventSO", menuName = "Scriptable Object/EventSO")] public class EventSO : ScriptableObject { private List listners = new List(); public void Subscribe(EventListener listener) { listeners.Add(listener); } public void Unsubscribe(EventListener listener) { listeners.Remove(listener.. 2023. 11. 15.
게임 디자인 패턴 16. 이벤트 버스 패턴 (Event Bus Pattern) 이벤트 버스 구현해보기이벤트 버스를 언제 사용해야하는가? 이벤트 버스 패턴은 이벤트의 게시와 구독을 연결하는 방법을 제시하는 디자인 패턴이다. 우리는 이러한 이벤트 버스 패턴을 추상화하여 이벤트 게시자와 구독자가 서로를 전혀 알지 못하도록 구현해볼 것이다. 이벤트 버스 구현해보기 레이싱 게임 프로젝트에서 이벤트 버스를 구현한다고 해보자. public enum RaceEventType { COUNTDOWN, START, RESTART, PAUSE, STOP, FINISH, QUIT } 다음과 같이 enum을 선언 후 이벤트 버스 클래스를 작성한다. using System.Collections.Generic; using UnityEngine.Events; public class RaceEventBus { p.. 2023. 11. 14.
Unity 제네릭 싱글턴 (Generic Singleton) 싱글턴 패턴의 매니저를 여러 번 선언하다보면 형태가 대부분 비슷한 것을 알 수 있다. 따라서 싱글턴의 기본 형태가 되는 부분을 제네릭으로 선언 후 그것을 상속받아 매니저를 구현할 수 있도록 만들 수가 있다. 제네릭 싱글턴 클래스 구현 using UnityEngine; public class Singleton : MonoBehaviour where T : Component { private static T _instance; public static T Instance { get { if (_instance == null) { _instance = FindObjectOfType(); if (_instance == null) { GameObject obj = new GameObject(); obj.name .. 2023. 11. 13.
게임 디자인 패턴 15. 공간 분할 패턴 (Spatial Partition Pattern) 공간 분할 패턴주의점공간 분할을 위해 사용할 수 있는 자료구조 다음의 게시글의 코드를 함께 참고하였습니다.Game programming patterns in Unity with C# - Spatial Partition Pattern | HabradorThis is a tutorial on game programming patterns in Unity with C# code. Another name for the same thing is software design patterns. You will learn the following programming patterns: command pattern, and much more. This section is all about the spatial parti.. 2023. 11. 12.
게임 디자인 패턴 14. 객체 풀 패턴 (Object Pool Pattern) 객체 풀 사용 시 주의점객체 풀의 크기가 너무 작다면객체 풀의 크기가 너무 크다면그 외 주의사항디자인 요소참고 객체 풀 (오브젝트 풀) 역시 상당히 자주 나와 익숙한 패턴일 것이다. 필자도 객체 풀을 한 번 정리한 적이 있었다.Unity 오브젝트 풀오브젝트 풀을 쓰는 이유오브젝트 풀 생성풀링용 함수 작성 오브젝트 풀을 쓰는 이유 유니티에서는 프리팹을 만들어 개체를 생성할 때 생성함수 Instantiate()와 삭제함수 Destroy()를 제공해준다. 하지만 이 두가지의 함수를 너무 자주 사용하게 되면 물리적인 메모리 상에서 파편화된 메모리 (찌꺼기 메모리)가 계속해서 발생하게 되면서 성능에 악영향을 줄 수 있다. 이러한 문제를 해결하기 위해 오브젝트 풀링 (Object Pooling)이라는 것을 사용한다.. 2023. 11. 9.
게임 디자인 패턴 13. 더티 플래그 패턴 (Dirty Flag Pattern) 더티 플래그가 필요한 상황주의사항 이름이 참으로도 눈길이 가는 패턴이다.여기서 말하는 플래그는 비트를 의미한다. (참 또는 거짓) 더티 플래그라는 말의 어원은 확실하지 않다고 한다.의미 상으로는 ‘더이상 맞지 않음’을 나타내는 플래그라고 한다. 더티 플래그가 필요한 상황 유니티에서 다음과 같은 오브젝트의 트랜스폼을 계산한다고 해보자. 각 오브젝트들의 Transform은 상위 오브젝트 Transform으로부터 상대적인 위치값을 가진다.하지만 이걸 화면에 렌더링 해주려면 절대적인 위치값, 즉 월드 좌표값이 필요하다. 그러면 Object4의 월드 좌표값을 얻기 위해서는 Object3 기준의 위치 변환을 해주고, Object2 기준의 위치 변환을 해주고, Object1 기준의 위치 변환을 해줘야 한다! 벌써부터.. 2023. 11. 8.
게임 디자인 패턴 12. 서비스 중개자 패턴 (Service Mediator Pattern) 서비스 중개자의 형태서비스 중개자 패턴 개선하기디자인 요소 “어디서든” 접근을 할 수 있게 만드려면 보통은 정적 클래스나, 싱글톤 패턴을 생각하게 될 것이다. 하지만 이는 강한 커플링을 발생시킨다.개인정보가 모두에게 노출되는 느낌이랄까? 따라서 전역 접근이 가능한 서비스를 한 단계 숨겨서 구체적인 내용은 숨긴 채 서비스를 이용만 할 수 있도록 구현한 패턴이 오늘 정리할 이 서비스 중개자 패턴이다. 읽다보면 느끼는 것이, 분명 싱글톤 패턴과 비슷하다고 느낄 것이다. 게임 디자인 패턴 5. 싱글턴 패턴 (Singleton Pattern)싱글턴 패턴의 주요 특징1. 전역 접근점을 제공2. 오직 한 개의 클래스 인스턴스만 갖도록 보장싱글턴 패턴의 장점장점 1) 한 번도 사용하지 않을 경우 인스턴스를 아예 생성하.. 2023. 11. 7.