C#41 게임 디자인 패턴 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. 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. 게임 디자인 패턴 11. 이벤트 큐 (Event Queue) 패턴 이벤트 vs 메시지이벤트 ‘큐’를 쓰는 이유가?디자인 요소 이벤트 큐 패턴이다. 왜 이벤트에 큐를 사용하지? 라는 의문이 들 수 있다.그것을 지금부터 설명해보고자 한다. 이벤트 vs 메시지 일단 모든 것을 설명하기 앞서 가장 먼저 짚고 넘어가야 할 것 중 하나다.생각보다 이벤트와 메시지를 구분하지 못하는 경우가 많다. 정리하자면 이렇다.이벤트는 이미 일어난 사건이다. 몬스터가 죽었거나, 투사체에 맞았거나 하는 등의 사건이 이벤트가 되겠다. 즉, 이 이벤트를 복수의 리스너가 들을 수 있도록 구현할수도 있는 것이다. 메시지는 받는 사람이 했으면 하는 행동을 표현한 것이다. 경험치를 얻는다던지, 사운드를 재생한다던지 등의 표현이 메시지가 되는 것이다. 보통은 리스너가 하나다. 여러 리스너가 하도록 구현할 수도.. 2023. 11. 6. 게임 디자인 패턴 10. 컴포넌트 패턴 (Component Pattern) 디자인 요소 1. 객체는 컴포넌트를 어떻게 얻는가?디자인 요소 2. 컴포넌트들끼리 어떻게 통신할 것인가?방법 1) 컨테이너 객체의 상태를 변경하는 변경하는 방식방법 2) 컴포넌트가 서로 참조하는 방식방법 3) 메시지를 전달하는 방식 컴포넌트 패턴이다. 사실 유니티를 조금이라도 다뤄봤다면 모를 수가 없다.유니티의 핵심 프레임워크인 GameObject가 전적으로 컴포넌트 방식에 맞춰 설계되었기 때문이다. 그래서 이번 시간에는 컴포넌트끼리 어떻게 구성해야하는지를 위주로 다뤄보겠다. 디자인 요소 1. 객체는 컴포넌트를 어떻게 얻는가? 객체가 컴포넌트를 어떻게 얻는지를 두 가지로 결정할 수 있겠다. 객체가 필요한 컴포넌트를 알아서 생성할 지 vs 외부 코드로부터 받을지 유지보수 측면에서는 외부로부터 받는 것이 더.. 2023. 11. 3. 이전 1 2 3 4 5 다음