inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

서브 퀘스트 제작

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

99

행복해꿀벌

작성한 질문수 3

0

안녕하세요!
메인퀘의 KillTheEliteGerm 퀘스트와
서브퀘의 KillTheNormalGerm 퀘스트가 둘 다 활성화되어 있을 때,

NormalGerm을 죽이면 KillTheNormalGerm퀘스트의 카운트만 올라가는데, EliteGerm을 죽이면 두 퀘스트(Kill Elite,Kill Normal)가 모두 카운트가 올라가는 문제가 있어 질문드립니다!

 

Elite를 죽일때 IsTarget() 디버깅을 해보니

image.pngimage.png

서로 다른 타겟을 비교하고 있음에도 Any에서 true를 반환하여

image.png

Normal일때도 IsTarget조건문을 통과해 ReceiveReport를 호출하더라구요.
관련된 로직을 마지막 강의의 완성 코드와 비교해봤는데 달라보이는건 없는 것 같아 답을 찾지 못하여 질문드립니다. 왜 그러는지 조언해주실 수 있을까요? ㅠㅠ

unity

답변 2

1

Developer G

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

GameObjectTarget Script의 IsEqual 함수의 내용을 보시면,
return targetAsGameObject.name.Contains(value.name);
라고 되어있습니다.

그럼 결론적으로 코드는 아래와 같이 됩니다.
EliteGermSlimeTarget.Contains(GermSlimeTarget)

EliteGermSlimeTarget이라는 문장에 GermSlimeTarget이 포함되어있으므로 true를 return하는거죠.
GermSlimeTarget의 이름을 NormalGermSlimeTarget으로 바꾸시면 문제가 해결될겁니다.

강의에서도 말씀드렸지만, 이름으로 객체를 비교하는건 이러한 문제가 생길 수 있으므로 본격적으로 자신의 게임에 QuestSystem을 적용하실 때는 좀 더 확실히 GameObject들을 비교할 방법을 만들어주시는게 좋습니다.

감사합니다.

0

행복해꿀벌

아아... 그렇네요ㅠㅠ IsEqual 오버라이드 함수 안까지 들어가서 볼 생각을 못했네요ㅠ.. 이름 바꾸니 잘 됩니다. 늦은 시간에도 답변 감사합니다!

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 행복해꿀벌님.

Elite Germ과 Normal Germ을 목표로 하는 두 퀘스트가 서로 다른 목표에 대해 의도치 않게 카운트가 올라가는 문제가 발생하고 있군요. 이 문제는 주로 IsTarget() 함수의 논리가 잘못 구현되어 있을 가능성이 큽니다.

먼저, IsTarget() 함수가 둘 이상의 타겟을 비교할 때 정확히 서로 다른 타겟을 구분하고 있는지 확인하는 것이 중요합니다. TaskTarget 클래스에서 IsEqual() 메서드가 타겟을 비교하게 되는데, 이때 각 타겟 객체의 특정 속성이 일치하는지 확인해야 합니다.

시도해볼 몇 가지 사항은 다음과 같습니다:

  1. 타겟 비교 논리 확인: TaskTarget 클래스의 IsEqual() 메서드가 사용하는 논리가 각 타겟 유형(예: Elite Germ, Normal Germ)에 대해 정상적으로 구분되고 있는지 확인합니다. 특히, 타겟 객체의 속성(예: 이름, ID 등)이 정확히 비교되고 있는지 확인하세요.

  2. 타겟의 데이터 형식 유효성 검사: IsTarget() 함수에서 타겟을 비교할 때, 올바른 형식으로 전달되고 있는지, 형변환 문제는 없는지 살펴보세요. 예를 들어, UnityEngine.GameObject 타입으로 정확히 캐스팅되는지 확인합니다.

  3. 디버깅: IsTarget() 함수에서 디버깅 메시지를 추가하여 매 호출 시마다 어떤 값들이 비교되는지 출력해 보세요. 이를 통해 어떤 값들이 일치하여 불필요한 증가가 일어나는지 알 수 있습니다.

이와 관련하여 아래의 유사한 질문과 답변을 참고하시면 도움이 될 수 있습니다:

추가적인 세부 정보를 알려주시면 더 구체적으로 도움을 드릴 수 있습니다.

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

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

0

20

2

Quest System의 확장성에 대한 질문

0

104

1

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

0

140

2

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

0

165

2

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

0

148

2

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

0

111

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