20230925부로 팀 과제 프로젝트를 시작한다. 우리 팀은 2D 로그라이크 RPG게임을 제작하기로 결정했다.
내가 담당한 부분은 게임의 맵 생성이다. 저번 강의에서 학습한 단순 TILEMAP으로 채우기가 아닌, 절차적 맵 생성 알고리즘을 이용한 랜덤 맵 구현이다.
이 기능에 대해 조사해 보니, 이진공간분할(BSP)이라는 알고리즘이 있었고, 마침 프로젝트의 레퍼런스가 될 몇몇 게임의 맵과 생성 방식이 유사하다고 생각해, 이틀 간 이 BSP에 대해 공부를 좀 하고 본격적인 맵 구현 작업을 진행할 생각이다.

여러 자료를 찾아 보고 있는데, 역시 하루 이틀로는 이해가 안 될 내용이다. 추석 연휴 때도 반드시 공부해야 한다.
디자인 패턴 - 전략 패턴
특정한 작업(알고리즘)을 독립적으로 정의하고 캡슐화하여, 해당 작업을 동적으로 교체할 수 있도록 하는 패턴
아래는 전략 패턴의 예시를 포함한 설명이다.
다양한 오리를 구현하는 방법
어떻게 다양한 오리를 구현하는가? 울음(quack), 헤엄(swim), 외형(display)로 구분해 구현한다.
오리 클래스라는 상위 클래스에 위 3개의 메서드를 가지고,
하위 청둥오리, 쇠오리, 러버덕 하위 클래스는 위 메서드를 가질 수 있다.
그런데, 오리 클래스에 비행(fly)메서드가 추가된다면?
러버덕 클래스에서는 사용하지 않을 메서드다. 이 정도야 override 비행() 으로 메서드 내용을 지우면 된다.
하지만, 날지 못하는 오리 클래스가 수천개 들어간다면? 비행 말고도 식용 가능(Eatable)메서드 같은 오리 클래스 내의 차이를 만들어 내는 메서드가 존재한다면? 일일이 다 수정하나? 그런 코드는 없다.
상속받는 하위 클래스에는 공통적으로 가지는 메서드, 차이점을 두고 가지는 메서드가 있다.
그럼 이 차이점을 어떻게 구현해야 하는가? 아래는 그 순서다.
- 인터페이스를 사용한다. 비행, 식용 가능 메서드는 상위 클래스에서 정의하지 않는다. 공통점 메서드(display)는 하나의 상위 클래스(duck)에서, 차이점 메서드(quack, fly, eatable)는 따로 각각의 인터페이스(IQuack, IFly, IEatble)에서 정의한다.
- 인터페이스에서 구현된 차이점 메서드를 이 인터페이스의 하위 클래스 (SayQuack, SoundSqueak, CanFly, CantFly, CanEat, CantEat)에서 구현한다.
- 공통점 메서드를 구현한 상위 클래스에서 위 인터페이스를 객체화하고, 차이점 메서드를 실행시키는 메서드를 구현한다.
- 상위 클래스를 상속받는 각각의 하위 클래스(청둥오리, 쇠오리, 러버덕, 베이징덕)에서 차이점 메서드를 각각 대응시켜 실행하는 메서드를 구현한다.
'UNITY' 카테고리의 다른 글
| UNITY_20231002[팀 과제-로그라이크 RPG - 벽, 방, 복도 만들기] (0) | 2023.09.27 |
|---|---|
| UNITY_20230926[팀 과제-로그라이크 RPG - RandomWalk 알고리즘] (0) | 2023.09.26 |
| UNITY_20230921[개인과제] (0) | 2023.09.22 |
| UNITY_20230920[개인과제] (0) | 2023.09.20 |
| UNITY_20230919[OBJECT POOL, MONOBEHAVIOR, UNITY 스크립트 생명 주기] (0) | 2023.09.19 |