유니티 퀘스트 시스템

정선호·2023년 8월 29일
0

Unity Features

목록 보기
18/27

강의 영상

깃허브 레포

시작하기 전에

요구 사전 지식

  • 유니티 이벤트, 이벤트 기반 아키텍처
  • 인풋 시스템
  • 유니티 라이프사이클 메소드(Awake, Start ...)
  • 프리팹과 오브젝트 생성
  • 스크립터블 오브젝트
  • 직렬화/역직렬화
  • C# 기초

인트로

퀘스트 시스템은 게임의 장르에 따라 다양하게 구현될 수 있다.
따라서 RPG게임식 퀘스트를 구현한 본 강의를 이해하고 자신의 게임에 잘 대입하길 바란다.


퀘스트의 정의 및 구조

퀘스트는 3가지 데이터를 가지고 있다.

  • 퀘스트를 시작할 수 있는 조건 혹은 요구사항
  • 퀘스트를 진행하는 방식
  • 퀘스트의 보상

퀘스트는 다음과 같이 상태로도 나뉠수 있다. 퀘스트를 수행하고 있는 상태에서는 퀘스트의 클리어 조건을 추적하는 기능 또한 존재해야 한다.
그러나 이런 클리어 조건은 종류가 다양하기 때문에 구현이 어렵게 된다.


퀘스트 데이터

퀘스트 스크립터블 오브젝트

대부분의 불변하는(static) 퀘스트 데이터들은 스크립터블 오브젝트로 저장하면 편하다.

각각 위에서부터 퀘스트 정보, 퀘스트의 요구사항, 퀘스트 진행, 퀘스트의 보상 데이터이다.

퀘스트 진행

퀘스트 진행(questSteps)는 구현하기 정말 까다로운데 물건 수집부터 상호작용까지 여러 종류의 진행상황이 있기 때문이다.

또한 다음과 같이 이전 단계에 의존하는 퀘스트 진행상황을 처리해야 한다.

혹은 퀘스트의 한 단계에서 여러 가지 요구조건을 제시할 수도 있다.

퀘스트 진행은 다음과 같이 구현된다.
위와 같이 구현된 콘크리트 퀘스트 스텝을 프리팹화하여 게임오브젝트로써 스크립터블 오브젝트에 추가된다.

프리팹화하는 이유는 퀘스트 도중 상황을 변화시키는 등의 작업을 하는 자식 게임오브젝트를 용이하게 추가할 수 있기 때문이다.

퀘스트 스크립트

비정적인 데이터(퀘스트 진행상황 등)을 저장하고 사용하기 위해 추가적으로 만드는 클래스이다.

퀘스트 내용 스크립터블 오브젝트, 퀘스트 스테이트, 현재 스텝 정보, 각각의 스텝에 대한 스테이트를 갖고 이를 보조해주는 여러 함수들을 갖는다.

퀘스트 스크립트는 다음과 같은 상태를 가진다.


퀘스트 매니저

퀘스트 매니저

게임 내의 모든 퀘스트의 상태를 관리하기 위한 매니저 클래스.

다음과 같이 퀘스트를 매니징한다.

  • 요구사항 변경 : 퀘스트를 수행할 수 있는지에 대한 요구사항의 변경점을 기록
  • 퀘스트 시작 : 입력받은 고유 ID에 해당하는 퀘스트 시작, 첫 번째 퀘스트 스텝 생성
  • 퀘스트 진행 : 다음 퀘스트 스텝으로 이동, 스텝이 더 없으면 퀘스트를 CAN_FINISH상태로 변경
  • 퀘스트 상태 변경 : 현재 퀘스트 상태를 다른 클래스에 전달하여 퀘스트 상태 변화에 따른 변경점을 실시할 수 있게 한다.
  • 퀘스트 종료 : 퀘스트를 종료, 퀘스트 보상 지급

또한 모든 퀘스트 데이터를 저장 및 불러올 수 있다.

퀘스트 포인트

퀘스트를 발주한 NPC에 추가되는 클래스

  • 퀘스트 변경시 : NPC위의 인디케이터 조작
  • 퀘스트 스텝 시작 및 종료 : 퀘스트 매니저의 시작/종료 호출

자세한 스크립트와 추가적인 구현 방법은 강의 영상 참조

profile
학습한 내용을 빠르게 다시 찾기 위한 저장소

0개의 댓글