퀘스트 시스템에 관련된 질문입니다.
338
작성한 질문수 1
선생님. 강의 잘 듣고 있습니다. 강의를 듣던 중에 궁금증이 생겨 질문 드립니다.
만약 특정 시간 이후에 리셋 되는 일일,주간, 월간 퀘스트 등의 반복 퀘스트 와 같은 경우에는
기존에 작성된 Task , Quest 클래스 에서 변수들을 모두 protected 로 변경하여 상속을 통해 새로운 클래스에 추가하는 것이 좋을까요? 아니면 기존에 작성된 Task , Quest 클래스에서 직접 코드를 수정하여 추가하는 것이 좋을까요?
답변 1
1
수강해주셔서 감사합니다.
기능 확장을 위해서 새로운 클래스를 만들 이유는 없을거 같구요, Task와 Quest, QuestSystem들을 수정하는 방향으로 확장하시는게 좋습니다. 만드실려는 기능은 강의에서 만들어지는 QuestSystem선에서 크게 확장을 안해도 쉽게 구현이 가능합니다.
일일, 주간, 월간 Quest의 경우, Quest의 Category에 Daily, Weekly, Monthly와 같은 명칭의 Category를 만들어 넣고, QuestSystem이나 별도의 System에서 QuestDatabase를 훓으며 날짜에 따라 해당하는 Category를 가진 Quest를 Register해주는 방식으로 매우 쉽게 구현이 가능합니다.
반복 Quest의 경우에도 Quest의 변수로 isRepeatQuest와 같은 bool형 변수를 만들어서 이 변수를 확인하여 Quest를 보여준다던가, 변수를 따로 만들지 않고 RepeatQuest와 같은 명칭의 Category를 만들어 넣어서 해당 Category가 있으면 Quest를 보여주 식으로 매우 쉽게 구현이 가능합니다.
더 단순하게는 그냥 위의 것들을 하나로 묶어 enum으로 만들어서 Quest 클래스에 변수로 추가하여 enum값을 확인해서 동작하게 만드는 것도 하나의 방법이 될 수 있겠습니다.
흔히 기능을 확장한다고하면 Item -> EquipmentItem, ConsumeItem 이런 식으로 상속으로 구현하려는 경우가 많은데요, 상속은 언제나 신중하게 할 필요가 있습니다. 앞선 예시에서 장착하는 아이템(EquipmentItem), 소비하는 아이템(ConsumeItem) 두 개의 class를 만들었는데, 만약 장착도 가능하고 소비도 가능한 아이템이 필요하다면 어떨까요? EquipmentAndConsumItem이라고 또 새로운 class를 만들 수 없는 노릇이죠. 애초에 상속을 안하고 Item class 자체를 확장해서 장착과 소비 기능을 만들었다면 문제가 없었을겁니다. 이처럼 상속은 만능이 아니라 그 만큼의 리스크가 있기 때문에 신중할 필요가 있습니다.
감사합니다.
Task 구현 28:36 Equals 에서 잘 모르는 부분이 있습니다.
0
45
2
Quest System의 확장성에 대한 질문
0
110
1
공부 방향에 대해 궁금한 점이 있습니다.
0
152
2
End()와 Complete() 함수를 따로 구현한 의도
0
178
2
Target의 value에 Object 자료형 관련 질문입니다!
0
158
2
TaskGroupState에 대하여 질문이 있습니다
0
117
2
Elite와 Normal Germ의 IsTarget()질문입니다.
0
108
2
퀘스트 시스템을 확장하면서 생긴 의문점 입니다.
0
181
2
퀘스트 클리어해도 동일 퀘스트가 노출됩니다
1
140
3
퀘스트 누적 클리어 횟수에 대해 여쭤보고싶습니다.
0
93
1
프로퍼티 사용 질문입니다.
0
125
1
Task 에서 Object 타입 사용
0
130
2
파일 저장방식, 퀘스트 실패에 관하여 여쭤보고싶습니다.
0
239
1
Destroy() 지연 파괴에 관하여
0
147
1
Action & Delegate
0
184
2
강의에서 리워드 관련 언급은 없으셔서 질문드립니다.
0
286
1
궁금한게있습니다
0
304
1
스크립터블 오브젝트 Instantiate?
0
448
1
원하는 타이밍에 퀘스트를 등록하고 싶다면 어떻게 해야할까요
0
345
1
Quest Cancel() 메소드
0
272
2
Task의 IsEqual
0
234
1
실전예제 UI 자료
0
205
1
스크립터블 오브젝트
1
337
1
Task 예시
1
179
1





