퀘스트 시스템은 게임의 장르에 따라 다양하게 구현될 수 있다.
따라서 RPG게임식 퀘스트를 구현한 본 강의를 이해하고 자신의 게임에 잘 대입하길 바란다.
퀘스트는 3가지 데이터를 가지고 있다.
퀘스트는 다음과 같이 상태로도 나뉠수 있다. 퀘스트를 수행하고 있는 상태에서는 퀘스트의 클리어 조건을 추적하는 기능 또한 존재해야 한다.
그러나 이런 클리어 조건은 종류가 다양하기 때문에 구현이 어렵게 된다.
대부분의 불변하는(static) 퀘스트 데이터들은 스크립터블 오브젝트로 저장하면 편하다.
각각 위에서부터 퀘스트 정보, 퀘스트의 요구사항, 퀘스트 진행, 퀘스트의 보상 데이터이다.
퀘스트 진행(questSteps)는 구현하기 정말 까다로운데 물건 수집부터 상호작용까지 여러 종류의 진행상황이 있기 때문이다.
또한 다음과 같이 이전 단계에 의존하는 퀘스트 진행상황을 처리해야 한다.
혹은 퀘스트의 한 단계에서 여러 가지 요구조건을 제시할 수도 있다.
퀘스트 진행은 다음과 같이 구현된다.
위와 같이 구현된 콘크리트 퀘스트 스텝을 프리팹화하여 게임오브젝트로써 스크립터블 오브젝트에 추가된다.
프리팹화하는 이유는 퀘스트 도중 상황을 변화시키는 등의 작업을 하는 자식 게임오브젝트를 용이하게 추가할 수 있기 때문이다.
비정적인 데이터(퀘스트 진행상황 등)을 저장하고 사용하기 위해 추가적으로 만드는 클래스이다.
퀘스트 내용 스크립터블 오브젝트, 퀘스트 스테이트, 현재 스텝 정보, 각각의 스텝에 대한 스테이트를 갖고 이를 보조해주는 여러 함수들을 갖는다.
퀘스트 스크립트는 다음과 같은 상태를 가진다.
게임 내의 모든 퀘스트의 상태를 관리하기 위한 매니저 클래스.
다음과 같이 퀘스트를 매니징한다.
CAN_FINISH
상태로 변경또한 모든 퀘스트 데이터를 저장 및 불러올 수 있다.
퀘스트를 발주한 NPC에 추가되는 클래스
자세한 스크립트와 추가적인 구현 방법은 강의 영상 참조