퀘스트를 만들다보니 궁금한점이 생겨 질문합니다.
510
작성한 질문수 2
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
좋은 강의 감사합니다.
퀘스트를 제가 생각한 방식에 맞게 만들다보니 궁금한 점이 생겨서 질문드립니다.
만약에 예를 들어 몬스터 5마리를 잡고 해당 몬스터가 드랍하는 아이템을 얻어야한다. 라는 퀘스트가 있다면 해당 몬스터에 두개의 QuestReport를 달아줘야 하는건가요?
답변 1
0
수강해주셔서 감사합니다.
이건 어떻게 만드냐에 따라 다른데요, 가장 간단한 방법은 인벤토리에 아이템이 들어왔을 때 해당 아이템이 인벤토리에 총 몇개가 있는지 Report 해주는겁는다. 인벤토리에 아이템을 넣는 함수에 직접 Report하는 코드를 작성하시거나, onPickedUp 같은 event를 만들어서 아이템을 넣는 함수에서 호출되게 하시고, QuestItemReporter 스크립트를 따로 만들어서 event에 연결하여 대신 Report 해주는 형식으로 만드시면 됩니다. 아이템을 뺄 때도 마찬가지입니다.
Task는 SimpleSet Action을 조합하고, CanReceiveReportsDuringCompletion 옵션을 체크해서, 계속 Report 받으면서 Task를 완전히 끝낼 때까지 인벤토리에 퀘스트 아이템이 몇 개가 있는지 감시하면 됩니다.
MMORPG 게임을 해보셨다면 '슬라임이 드랍하는 점액을 가져와라'라는 퀘스트가 있을 때, 직접 몬스터를 잡아서 점액을 가져와도 되지만, 보통 그냥 사람들한테 점액을 사서와도 Complete가 되죠? 보통 아이템 수량 관련한 퀘스트는 말씀드린대로 인벤토리에 있는 아이템 수량을 체크하는 방식으로 만듭니다.
감사합니다.
0
빠른 답변 감사합니다. 하지만 위와 같이 체크를 하더라도 만약에 여러가지 아이템을 모아야하는 상황이 온다면 제 질문과 같이 여러개의 QuestReport를 달아줘야하는거 아닌가요??
예를 들면 '슬라임의 점액과 슬라임의 물방울을 가져와라'라는 퀘스트가 있다고하면
타겟이 두개가 존재하게 되고
이것이 아니더라도 5레벨때는 '슬라임의 점액을 가져와라'라면 10레벨때는 '킹슬라임의 점액을 가져와라' 라는 퀘스트마다 타겟이 다를때는 어떻게 해줘야되는건가요?
0
제가 충분히 이해시켜드리지 못한 것 같습니다.
class Inventory
{
private List<Item> items
public void Push(Item newItem)
{
var item = items.FirstOrDefault(x => x.ID == newItem.ID);
if (item)
item.Count += newItem.Count;
else
{
items.Add(newItem);
item = newItem
}
// Ex. Category = "Item", CodeName = "슬라임 점액", Count = 3
// => '슬라임 점액'이 Target인 Task의 SuccessCount가 3으로 Update
QuestSystem.Instance.ReceiveReport("Item", item.CodeName, item.Count);
}
public Item Pull(string codeName)
{
// Pull 처리
...
//
QuestSystem.Instance.ReceiveReport("Item", item.CodeName, item.Count);
return item;
}
}
이런 식으로 Inventory의 Item을 넣고 빼는 함수(Push, Pull)에 Report 함수를 직접 작성해서 넣어주면, 따로 QuestGiver를 넣을 필요 없이 어떤 아이템이든 습득, 제거할 때마다 Task가 Report 받게 됩니다. 만약 인자로 들어온 newItem의 CodeName이 '슬라임 점액'일 경우, 슬라임 점액이 Target인 Task가 Report 받아서 SuccessCount가 Update 될겁니다. 슬라임 점액이 Target인 Task가 없으면 아무 일도 안 일어날거구요.
Task와 Target은 아래처럼 구성할 수 있을겁니다.


Task 구현 28:36 Equals 에서 잘 모르는 부분이 있습니다.
0
26
2
Quest System의 확장성에 대한 질문
0
106
1
공부 방향에 대해 궁금한 점이 있습니다.
0
143
2
End()와 Complete() 함수를 따로 구현한 의도
0
166
2
Target의 value에 Object 자료형 관련 질문입니다!
0
149
2
TaskGroupState에 대하여 질문이 있습니다
0
112
2
Elite와 Normal Germ의 IsTarget()질문입니다.
0
100
2
퀘스트 시스템을 확장하면서 생긴 의문점 입니다.
0
166
2
퀘스트 클리어해도 동일 퀘스트가 노출됩니다
1
129
3
퀘스트 누적 클리어 횟수에 대해 여쭤보고싶습니다.
0
85
1
프로퍼티 사용 질문입니다.
0
118
1
Task 에서 Object 타입 사용
0
120
2
파일 저장방식, 퀘스트 실패에 관하여 여쭤보고싶습니다.
0
218
1
Destroy() 지연 파괴에 관하여
0
140
1
Action & Delegate
0
179
2
강의에서 리워드 관련 언급은 없으셔서 질문드립니다.
0
276
1
궁금한게있습니다
0
294
1
스크립터블 오브젝트 Instantiate?
0
437
1
원하는 타이밍에 퀘스트를 등록하고 싶다면 어떻게 해야할까요
0
339
1
Quest Cancel() 메소드
0
265
2
Task의 IsEqual
0
227
1
실전예제 UI 자료
0
194
1
스크립터블 오브젝트
1
325
1
Task 예시
1
167
1





