디자인 패턴 맨텀 2021. 9. 22. 20:45
타입을 상속으로 표현하는 대신 참조 관계로 만들어서 유연하게 타입을 표현한다. 다양한 몬스터가 등장하는 RPG를 만든다고 가정해보자. 첫 번째 마을 근처에는 다양한 슬라임들이 등장하고, 두 번째 마을에서는 고블린 등이 등장하고, 세 번째 마을에서는 오크들이 등장하고.. 장소마다 특정 테마가 있고, 같은 종족의 다양한 몬스터가 등장하는게 일반적일 것이다. 레드 슬라임, 블루 슬라임, 그린 슬라임 등이 존재하고 고블린 아처, 고블린 워리어, 고블린 매지션 등이 존재할 때, 각 종족은 공통되는 특징들이 존재할 것이다. 고블린은 속도가 빠르다거나 오크는 체력이 많다거나 말이다. 상속으로 종족만들기 일단 출발은 MonsterBase클래스를 만들 것이다. public class MonsterBase { protec..
디자인 패턴 맨텀 2021. 8. 22. 20:35
메시지나 이벤트를 보내는 시점과 처리하는 시점을 디커플링 한다. 풀어 말하면, 각 객체들이 이벤트를 관리하는 매니저에게 메시지를 보낼 수 있고, 특정 메시지가 오면 알려달라고 부탁할 수도 있다. 여기까지는 관찰자 패턴과 동일하다. 추가된 것은 '시점'이다. 이벤트 큐 패턴은 관찰자 패턴의 비동기 버전이라고 할 수 있다. [ 이벤트 시스템의 간단한 예시 ] 몬스터 관리 클래스는 격파될 때마다 'OnMonsterDeath' 이벤트를 호출. 퀘스트 관리 클래스는 OnMonsterDeath 이벤트가 발생할 때마다 이벤트 큐 매니저가 호출해줘서 횟수를 기록한다. 이벤트 시스템을 만들 때 많이 사용되는 UniRX가 한 예시이다. 예시 : 사운드 시스템 일반적으로 사운드 매니저를 구현해보면 이런 식이 될 것이다. p..
디자인 패턴 맨텀 2021. 7. 11. 22:00
커맨드 패턴은 메서드 호출을 실체화 한 것이다. 조금 더 풀어서 설명하자면 객체의 행동을 클래스로 감싸는 것이다. 커맨드 패턴으로 구현할 수 있는 대표적인 예는 '입력키의 변경'과 'Undo 기능'이 있다. 입력키를 구현해보자. - 유니티에서 A 버튼에 공격, B 버튼에 점프하도록 구현해보자. public class Player : MonoBehaviour { private void Update() { if (Input.GetKeyDown(KeyCode.A)) { Attack(); } else if (Input.GetKeyDown(KeyCode.B)) { Jump(); } } private void Attack(){} private void Jump(){} } 간단하게 위와 같이 구현할 수 있다. 이 정..
디자인 패턴 맨텀 2021. 7. 4. 18:08
로직을 기능별로 모듈화시켜 조합하여 사용하는 것. 도서 '게임 프로그래밍 패턴'에서는 디커플링 패턴으로 분류하고 있다. 유니티는 이미 오브젝트에 컴포넌트를 붙이면서 행동을 추가하는 컴포넌트 패턴 방식을 사용하고 있다. 게임을 만들 때에, 플레이어는 이동하고, 점프하며, 공격할 수도 있고 벽에 부딪히기도 하는 여러 행동을 가지게 된다. 하지만 이러한 행동들을 하나의 클래스에서 정의하게되면 거대 클래스가 만들어진다. 클래스가 거대화 되면서 내부적으로 기능들의 커플링이 심각해지게 된다. 클래스가 얽히면서 수정사항이 다른 기능에 영향을 미치게되니 협업도 불가능해진다. 컴포넌트 패턴을 사용하면 클래스를 행동에 따라 여러개로 나눌 수 있다. 세부 기능들을 나눈 다음, 서로 통신이 필요한 경우만 결합하여 사용할 수 ..