Unity 프로젝트에서 SQLite를 이용해 구현한 퀘스트 시스템 입니다.
UnityQuestSystem을 이용해서 게임의 분기, 오브젝트 온오프 등 다양한 방식을 쉽게 구현할 수 있습니다.
- Unity Editor (2019.3.3f1 or newer)
- 기기에 Unity Editor (2019.3.3f1 or newer)를 설치합니다.
- Git을 통해 UnityQueestSystem을 하드 드라이브에 클론합니다.
git clone https://github.com/ClassRabbit/UnityQuestSystem
- Unity 에디터로 Unity 프로젝트를 엽니다.
- Unity 에디터를 통해 UnityQuestSystem 패키지를 가져옵니다.
Assets -> Import Package -> Custom Package
- Quest : 일종의 하나의 값 뜻 하며 기본 값으로 False를 가집니다. 이후 이 Quest가 해결된다면 True값으로 변경됩니다.
- Swtich : Quest를 이용하여 다단계의 상태를 만들 수 있으며 현재 해결된 Quest 값들로 하나의 상태 결과 값을 가집니다.
- SwitchController : 추상 클래스로 Switch의 변화를 구독하는 Observer 입니다.
- QuestManager : Quest가 해결되는 정보를 발행하는 Publisher입니다.
Switch의 상태 중 계산 결과가 True인 마지막 상태의 상태 결과 값이 적용됩니다.
Ex) Switch [S0001]
Quest가 아무것도 클리어 되지 않은 상황
| 상태 | 계산식 | 계산 결과 | 상태 결과 |
|---|---|---|---|
| 기본 | - | True | True (적용) |
| 0 | [Q0001] | False | False |
| 1 | [Q0002] & [Q0003] | False | True |
Quest - [Q0001]가 해결 된 상태일때
| 상태 | 계산식 | 계산 결과 | 상태 결과 |
|---|---|---|---|
| 기본 | - | True | True |
| 0 | [Q0001] | True | False (적용) |
| 1 | [Q0002] & [Q0003] | False | True |
Quest - [Q0001], [Q0002]가 클리어 된 상태일때
| 상태 | 계산식 | 계산 결과 | 상태 결과 |
|---|---|---|---|
| 기본 | - | True | True |
| 0 | [Q0001] | True | False (적용) |
| 1 | [Q0002] & [Q0003] | False | True |
Quest - [Q0001], [Q0002], [Q0003]가 클리어 된 상태일때
| 상태 | 계산식 | 계산 결과 | 상태 결과 |
|---|---|---|---|
| 기본 | - | True | True |
| 0 | [Q0001] | True | False |
| 1 | [Q0002] & [Q0003] | True | True (적용) |
Quest - [Q0002], [Q0003]가 클리어 된 상태일때
| 상태 | 계산식 | 계산 결과 | 상태 결과 |
|---|---|---|---|
| 기본 | - | True | True |
| 0 | [Q0001] | False | False |
| 1 | [Q0002] & [Q0003] | True | True (적용) |
Quest - [Q0003]가 클리어 된 상태일때
| 상태 | 계산식 | 계산 결과 | 상태 결과 |
|---|---|---|---|
| 기본 | - | True | True (적용) |
| 0 | [Q0001] | False | False |
| 1 | [Q0002] & [Q0003] | False | True |
- Unity 에디터에서 UnityQuestSystem의 PreferencesWindow를 엽니다.
QuestSystem -> PreferencesWindow
- 원하는 데이터베이스명을 입력하고 결정 버튼을 누르면 프로젝트 내로 StreamingAssets 디렉토리에 SQLite 데이터베이스가 생성됩니다.
Assets/StreamingAssets/DatabaseName
- Unity 에디터에서 UnityQuestSystem의 EditQuestWindow 엽니다.
QuestSystem -> EditQuestWindow
- QuestId를 입력합니다. (필수)
- 설명을 입력합니다. (선택)
- 생성 버튼을 누릅니다.
- Unity 에디터에서 UnityQuestSystem의 EditSwitchWindow 엽니다.
QuestSystem -> EditSwitchWindow
- QuestId를 입력합니다. (필수)
- 기본 결과를 선택합니다.
- 설명을 입력합니다. (선택)
- 필요에 따라 추가적인 상태를 생성합니다.
- 생성 버튼을 누릅니다.
Unity 에디터에서 UnityQuestSystem의 SearchWindow를 통해서 생성된 Quest와 Switch를 조회할 수 있습니다.
QuestSystem -> SearchWindow
- 추상 클래스 UnityQuestSystem.SwitchController를 상속하여 Switch의 결과 값에 따른 행동을 구현합니다.
- 구현한 SwitchController를 컴포넌트로 가진 GameObject를 Scene에 배치합니다.
- UnityQuestSystem.SQLiteManager을 이용하여 생성한 SQLite 데이터베이스와 연결되도록 하는 GameObject를 Scene에 배치합니다.
UnityQuestSystem.SQLiteManager.Instance.Connect("DatabaseName");- UnityQuestSystem.QuestManager를 이용하여 Quest를 해결하고 Switch를 업데이트하여 SwitchController를 작동시킵니다.
// 퀘스트 해결
UnityQuestSystem.QuestManager.Instance.ClearQuest("Q0001");
UnityQuestSystem.QuestManager.Instance.ClearQuest("Q0002");
// 해결된 퀘스트에 따라 관련된 Switch를 업데이트
UnityQuestSystem.QuestManager.Instance.Update();Assets/Scene/QuestSystem/SampleScene
- Quest Menu를 통해서 Quest를 해결할 수 있습니다.
- Switch Menu를 통해서 Scene에 포함된 Switch의 현재 상태 결과를 확인할 수 있습니다.





