inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[유니티 레벨 업!] 모듈식으로 개발하는 퀘스트&업적 시스템

Quest 구현

End()와 Complete() 함수를 따로 구현한 의도

165

마현호

작성한 질문수 1

0

1. TaskGroup

1) End()

-State를 Complete로 변경

-각 task의 task.End() 호출

2) Complete()

- State를 Complete로 변경

-각 task가 Complete가 아니면 task.Compete()

 

2. Task

1) End()

-event 초기화

2) Complete()

-현재 성공 횟수를 완료 요구값으로 변경

 

저는 이렇게 이해했는데 End()와 Complete()를 분리한 의도가 이해가 잘 안됩니다.

unity

답변 2

1

Developer G

수강해주셔서 감사합니다.

Complete 함수는 TaskGroup 혹은 Task를 '완료 상태'로 만들고 싶을 때 호출합니다. 예를 들어, '퀘스트 완료권' 아이템을 캐쉬로 판다고 가정했을 때, 이 아이템을 쓰면 TaskGroup의 Complete 함수를 써서 TaskGroup을 완료 상태로 만들어주는 겁니다. 그리고나서 퀘스트를 준 NPC에게 찾아가 말을 걸면 퀘스트가 완료되겠죠.

End 함수는 현재 TaskGroup이 완전히 종료되어 더 이상 동작할 필요가 없을 때 호출됩니다. Task가 Complete 된 상태라고 하더라도 설정(CanReceiveReportsDuringCompletion)에 따라서 보고를 계속 받을 수 있던걸 기억하시죠? Complete 함수는 Task를 완료 상태로 만들어줄 뿐, Task를 끝내진(End) 않기 때문에 완료 상태에서 언제든지 미완료 상태로 전환될 수 있습니다. 예를 들어, Task의 조건 아이템(=슬라임 점액 5개)을 먹어서 Task가 완료된 상태(Complete)이지만, 조건 아이템을 다시 버린다면 미완료 상태(Running)로 전환되겠죠? End 함수가 호출되기 전까지는 Task는 완료 여부와 상관 없이 계속 동작 중인 상태인 겁니다.


감사합니다.

0

마현호

Task 완료(갱신 가능)와 종료를 구분한 거였군요

답변 감사합니다!

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 마현호님.

End()Complete() 함수의 분리된 구현은 시스템의 유연성과 유지보수를 고려한 디자인 패턴이라고 볼 수 있습니다. 각 함수는 서로 다른 상황에서 사용되며, 특정 기능이나 상태 변경을 담당합니다.

1. End()

  • 의도: End() 함수는 일반적으로 작업 그룹이나 개별 작업의 종료를 처리할 때 사용됩니다. 상태를 “완료”로 설정하고, 작업 종료 시 필요한 다른 처리를 수행합니다.
  • 세부사항: TaskGroup의 경우엔 그룹 내 모든 작업의 종료를 명시적으로 처리하며, 동일하게 Task에서는 이벤트 리스너를 해제하여 메모리 누수 방지와 더불어 상태 처리 후 클린업을 돕습니다.

2. Complete()

  • 의도: Complete() 함수는 작업이나 작업 그룹이 실제로 완료되었을 때 호출되어야 합니다. 주로 최종 상태에 대해 필요한 특정 변경이나 업데이트를 수행합니다.
  • 세부사항: 작업 완료 조건을 충족하는지 확인하고, 필요한 경우 완료 상태를 명시적으로 설정하여 사용자에게 작업 완료를 알립니다.

이 두 함수를 별도로 유지함으로써, 개발자는 시스템의 어떤 부분이 언제 종료되었는지 명확하게 추적할 수 있으며, 특정 종료 처리 로직을 필요할 때마다 쉽게 수정할 수 있습니다. 이러한 분리는 유지보수를 용이하게 하고, 코드의 사고 가능성을 줄이며, 특정 요구에 쉽게 적응할 수 있도록 돕습니다.

이와 관련된 다른 수강생들의 논의나 질문이 있는 게시글을 통해 더 자세히 알고 싶으시다면, 아래 URL을 참고해 주세요:
- Task 상태 관리와 종합에 대한 논의

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Task 구현 28:36 Equals 에서 잘 모르는 부분이 있습니다.

0

20

2

Quest System의 확장성에 대한 질문

0

104

1

공부 방향에 대해 궁금한 점이 있습니다.

0

139

2

Target의 value에 Object 자료형 관련 질문입니다!

0

148

2

TaskGroupState에 대하여 질문이 있습니다

0

111

2

Elite와 Normal Germ의 IsTarget()질문입니다.

0

99

2

퀘스트 시스템을 확장하면서 생긴 의문점 입니다.

0

165

2

퀘스트 클리어해도 동일 퀘스트가 노출됩니다

1

128

3

퀘스트 누적 클리어 횟수에 대해 여쭤보고싶습니다.

0

84

1

프로퍼티 사용 질문입니다.

0

117

1

Task 에서 Object 타입 사용

0

119

2

파일 저장방식, 퀘스트 실패에 관하여 여쭤보고싶습니다.

0

217

1

Destroy() 지연 파괴에 관하여

0

139

1

Action & Delegate

0

178

2

강의에서 리워드 관련 언급은 없으셔서 질문드립니다.

0

274

1

궁금한게있습니다

0

293

1

스크립터블 오브젝트 Instantiate?

0

436

1

원하는 타이밍에 퀘스트를 등록하고 싶다면 어떻게 해야할까요

0

338

1

Quest Cancel() 메소드

0

262

2

Task의 IsEqual

0

224

1

실전예제 UI 자료

0

193

1

스크립터블 오브젝트

1

322

1

Task 예시

1

163

1

퀘스트의 상태인 QuestState를 다른 스크립트에서 받을 수 있나요

1

305

2