작성
·
70
0
안녕하세요!
메인퀘의 KillTheEliteGerm 퀘스트와
서브퀘의 KillTheNormalGerm 퀘스트가 둘 다 활성화되어 있을 때,
NormalGerm을 죽이면 KillTheNormalGerm퀘스트의 카운트만 올라가는데, EliteGerm을 죽이면 두 퀘스트(Kill Elite,Kill Normal)가 모두 카운트가 올라가는 문제가 있어 질문드립니다!
Elite를 죽일때 IsTarget() 디버깅을 해보니
서로 다른 타겟을 비교하고 있음에도 Any에서 true를 반환하여
Normal일때도 IsTarget조건문을 통과해 ReceiveReport를 호출하더라구요.
관련된 로직을 마지막 강의의 완성 코드와 비교해봤는데 달라보이는건 없는 것 같아 답을 찾지 못하여 질문드립니다. 왜 그러는지 조언해주실 수 있을까요? ㅠㅠ
답변 2
1
수강해주셔서 감사합니다.
GameObjectTarget Script의 IsEqual 함수의 내용을 보시면,
return targetAsGameObject.name.Contains(value.name);
라고 되어있습니다.
그럼 결론적으로 코드는 아래와 같이 됩니다.
EliteGermSlimeTarget.Contains(GermSlimeTarget)
EliteGermSlimeTarget이라는 문장에 GermSlimeTarget이 포함되어있으므로 true를 return하는거죠.
GermSlimeTarget의 이름을 NormalGermSlimeTarget으로 바꾸시면 문제가 해결될겁니다.
강의에서도 말씀드렸지만, 이름으로 객체를 비교하는건 이러한 문제가 생길 수 있으므로 본격적으로 자신의 게임에 QuestSystem을 적용하실 때는 좀 더 확실히 GameObject들을 비교할 방법을 만들어주시는게 좋습니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. 행복해꿀벌님.
Elite Germ과 Normal Germ을 목표로 하는 두 퀘스트가 서로 다른 목표에 대해 의도치 않게 카운트가 올라가는 문제가 발생하고 있군요. 이 문제는 주로 IsTarget()
함수의 논리가 잘못 구현되어 있을 가능성이 큽니다.
먼저, IsTarget()
함수가 둘 이상의 타겟을 비교할 때 정확히 서로 다른 타겟을 구분하고 있는지 확인하는 것이 중요합니다. TaskTarget
클래스에서 IsEqual()
메서드가 타겟을 비교하게 되는데, 이때 각 타겟 객체의 특정 속성이 일치하는지 확인해야 합니다.
시도해볼 몇 가지 사항은 다음과 같습니다:
타겟 비교 논리 확인: TaskTarget
클래스의 IsEqual()
메서드가 사용하는 논리가 각 타겟 유형(예: Elite Germ, Normal Germ)에 대해 정상적으로 구분되고 있는지 확인합니다. 특히, 타겟 객체의 속성(예: 이름, ID 등)이 정확히 비교되고 있는지 확인하세요.
타겟의 데이터 형식 유효성 검사: IsTarget()
함수에서 타겟을 비교할 때, 올바른 형식으로 전달되고 있는지, 형변환 문제는 없는지 살펴보세요. 예를 들어, UnityEngine.GameObject
타입으로 정확히 캐스팅되는지 확인합니다.
디버깅: IsTarget()
함수에서 디버깅 메시지를 추가하여 매 호출 시마다 어떤 값들이 비교되는지 출력해 보세요. 이를 통해 어떤 값들이 일치하여 불필요한 증가가 일어나는지 알 수 있습니다.
이와 관련하여 아래의 유사한 질문과 답변을 참고하시면 도움이 될 수 있습니다:
IsEqual()
메서드가 객체를 어떻게 비교해야 하는지를 다룹니다.추가적인 세부 정보를 알려주시면 더 구체적으로 도움을 드릴 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
아아... 그렇네요ㅠㅠ IsEqual 오버라이드 함수 안까지 들어가서 볼 생각을 못했네요ㅠ.. 이름 바꾸니 잘 됩니다. 늦은 시간에도 답변 감사합니다!