Task는 Quest에서 실제로 해야 하는 작업을 나타낸다.
위의 "모험 전투 5회 도전하기" 와 "제작소에서 장비 3회 강화하기" 퀘스트들을 예시로 설명하자면
첫번째 퀘스트
Target = 모험 전투
Category = -회 도전하기
두번째 퀘스트
Target = 제작소
Category = -회 강화하기
모두 무엇을, 몇회, 어떤 것을 하는지로 구성되어있다.
이것들은 모두 CountTask 이고
CountTask 외에 많이 쓰이는 SetTask도 있다.
Task 생성과 필드 구성
Task 스크립트를 생성해주고, 스크립터블 오브젝트로 만든다.
코드 내에서 스크립트끼리 구별하게 할 수 있는 codeName을 선언해주고
퀘스트의 간단한 설명을 쓸 수 있는 description을 선언해준다.
퀘스트 시스템의 필수인 성공까지 필요한 횟수를 선언해주고
현재 성공횟수도 선언해준다.
나머지 변수도 프로퍼티로 제작
성공횟수 받아오기
성공 횟수를 받아와 현재 성공 횟수에 대입하는 Task 시스템의 핵심적인 함수이다.
하지만 위처럼 구현했을 시, 단순히 성공한 횟수를 현재 성공 횟수에 대입하는 것이 다이기 때문에
다르게 계산하는 기능을 추가하려면 어려움을 겪을 수 있다.
따라서 작동 로직을 추가해 넣어야 한다.
계산하는 모듈을 가상으로 TaskAction이라고 변수를 선언해주고,
ReceieveReport 모듈을 수정해준다.
현재 성공 횟수에 들어온 성공 횟수를 더해서 반환하는 함수를 상상하며 Run이라는 함수를 가상으로 만들어준다.
만약 Count하는 계산 로직이면,
현재 성공 횟수가 1이고 들어온 성공 횟수가 1이라면 2가 반환되어 CurrentSuccess에 대입될 것이다.
TaskAction 구현
이제 구현을 할 차례이다.
다양한 로직을 생성할 수 있게 하기 위해 abstract 클래스로 선언해주고 추상 함수를 선언한다.
이제 TaskAction 스크립트를 이용하여 다양한 로직들을 만들 수 있다.
현재 성공값에다가 들어온 성공값을 더한 후 반환하는 SimpleCount 스크립트
들어온 성공값을 바로 반환하는 SimpleSet 스크립트
들어온 성공값이 0보다 크면 (양수이면) 현재 성공값에다가 들어온 성공값을 더한 후 반환하고
아니면 현재 성공값만 반환하는 PositiveCount 스크립트
반대로 음수이면 더해서 반환하는 NegativeCount 등등...
내가 원하는 Task 형태에 따라 다양한 계산 반환 로직을 만들어낼 수 있게 되었다.
Task SO를 만들어주고,
Action SO도 만들어준뒤 인스펙터에서 Task SO에 삽입한다.
이제 어떤 로직을 사용할건지에 따라 TaskAction을 갈아끼우면 된다.
초기 성공 값
모든 퀘스트는 초기 성공값이 다 다를 수 있다.
예를 들어, 레벨 40 달성하기 => 초기 성공값이 내 레벨이어야 함
힘 스탯 100 찍기 => 초기 성공값이 내 힘 스탯이어야 함
같은 경우들에 대비하기 위해 초기 성공값 로직을 구현해야 한다.
추상 클래스로 InitialSuccessValue라는 스크립트를 만들어주고 추상 함수 GetValue를 만들어준다.
Task 스크립트에 변수로 선언해주고 자세한 로직 구현은 나중에 한다.
'강의 공부' 카테고리의 다른 글
[강의공부][모듈식으로 개발하는 퀘스트&업적 시스템] Quest 구현 (1) (0) | 2023.11.01 |
---|---|
[강의공부][모듈식으로 개발하는 퀘스트&업적 시스템] Task 구현 (3) Category와 Task 마무리 (0) | 2023.11.01 |
[강의공부][모듈식으로 개발하는 퀘스트&업적 시스템] Task 구현 (2) Target 구현 (0) | 2023.10.30 |
[강의공부][모듈식으로 개발하는 퀘스트&업적 시스템] 모듈식 프로그래밍 (0) | 2023.10.30 |