Zenject Zenject(ExZenject)는 Unity에서 사용할 수 있는 무료 DI 프레임워크이다. 이 글에서는 DI가 무엇이며, 이를 왜 사용하는 것이고, 어떻게 활용할 수 있는지에 대해 정리했다. 의존 관계 역전 원칙(DIP, Dependency Inversion Principle) 프로그래머는 추상화에 의존해야 하고, 구체화에 의존하면 안 된다. 게임을 개발을 예시로 들어보자. 각 유닛은 무기를 가지고 있고, 무기는 각각의 대미지가 있다. 여기서 상대를 공격하는 코드를 작성하면 다음과 같다. public class Unit { private int _hp; private Normal_weapon; public void ReceiveDamage(int amount) { _hp -= amount..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/dGWLI8/btsnFDO5y3C/vFHrtjj6N1ZaEDJQKV1wV0/img.gif)
이번에 만든 건 카드 시스템이다. 카드 시스템을 만들 때에는 1. 원형으로 카드가 정렬되어야 함 2. 카드의 다양한 능력을 구현할 수 있어야 함 3. 힘, 약화 등 버프/ 디버프와 디펙트의 스택과 같이 값이 계속해서 바뀌는 카드도 대응해야 함 4. 타게팅이 필요한 카드와 필요하지 않은 카드를 구분해야 함 5. 포식/의식용 단검/불태우는 일격 등 효과에 조건문을 고려해야 하는 카드가 있음 등 여러 요소들을 고려하면서도, 일반화를 잘 해서 에디터로 뺄 수 있게끔 만드는 게 목표였다. 그래서 우선 에디터를 만들기 전 필요한 필드를 정리하고, 카드 시스템을 구현해 보았다. ScriptableObject와 함께 사용해서 에디터 확장으로 만들까 했지만... 유니티 내부에서만 관리 가능한 에셋이라는 점도 아쉬웠고, ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bIQfWA/btsngI4zUvZ/XoNBuVidy76wkEOhzsUVPk/img.png)
Slay the Spire라는 게임을 카피해보기로 했다. 이제는 20승천을 밥먹듯이 깰 만한 정도의 실력이 되어서 나름 시스템에 대해 잘 알고있다고 자부하기도 하고, 기왕 만들거면 좋아하는 게임을 만드는 게 즐겁지 않을까 하는 생각이다. 오늘은 가장 먼저 절차적 맵 생성 시스템을 만들어봤다. 내가 사용한 방법은 다음과 같다. (a) 경로 생성 1. 7x15 크기의 Grid를 만든다. 2-1. 가장 아래층의 방을 하나 선택한다. 2-2. 선택한 방을 기준으로 위 층에 있는 인접한(x-1, x, x+1) 방을 하나 선택한다. 2-3. 15층이 될 때까지 이 과정을 반복한다. 3. 이 과정을 총 6번 수행한다. 하지만, 최소 2개의 시작지점이 보장되어야 한다(1층에서 처음으로 선택하는 두 개의 방은 다른 방이..