근접 공격 강좌에서 NRE이 발생하는데 시점 문제로 발생한 문제인지 이슈를 쳐내기가 곤란합니다.

이러한 이슈가 발생해 찾은 결과

Monster Script의 37번 째 줄인 FindClosetTarget 함수에서 타겟을 찾지 못해 NPR이 발생한 내용으로 확인되었는데
Spawner에 Players를 넣어주어 플레이어인 Cleric과 Barbarian이 잡히나, 간헐적으로 Null을 return 해주는 현상이 발생하는데, 이게 Update 문 안에서 실행되어 FindClosetTarget 구문이 매우 빠른 속도로 실행되어 발생한 시점 문제인지 궁금합니다. 현재 강사분과 코드는 동일한 것으로 확인됩니다.

답변 2
0
안녕하세요, 괜찮으시다면 pinous.g@gmail.com
으로 프로젝트 전체를 보내주실 수 있으실까요? 직접 파악하여 컴포넌트 설정에서의 문제가 혹시 있을지 파악을 좀 해보도록 하겠습니다 🙂
0
안녕하세요! 스크립트 파악 해 보았습니다.
m_Target.GetComponent<Character>().isDead<- 해당 구분을 수정 하였습니다.
현재 새소식란에 제가 깃허브 링크로 지금까지 만들었던 스크립트를 넣어 두었는데요,
차이점을 먼저 말씀드리면
FindClosetTarget은 m_Target이 null일때에만 작업을 진행하고,
m_Target이 null이 아닐때에 하단의 문장들이 시작됩니다.
현재 수강생님 코드는 m_Target이 null일 때에도 해당 Target의 isDead변수를 참조하려고 하면서 문제가 발생합니다.
Target이 없기에 isDead도 찾지 못하여서 생긴 문제이니 스크린샷을 보시고 수정 해 주시면 좋을 것 같습니다 😃
또 다른 어려운 점이 있으시다면 편하게 질문 부탁드리겠습니다 !!

0
빠른 답변 감사합니다.
혹시 현재 Unity 버전과 visual studio 버전을 동일하게 맞춰놓았는데
지금 강사님과의 코드와 상이한 부분이 있었던 것인지,
아니면 장비의 렌더링 차이 ex) CPU, RAM 등 으로 인한 속도 차이 때문에 발생한 것 인지
어떠한 문제가 발생된 것일까요 ?
0
코드 부분이 약간 다르게 되어 있었더라구요, 위에 설명드렸듯 수강생님 코드에서는 조건문이 빠져 있었습니다..!
아마 현재까지 수강한 제 강의에서는 저대로만 진행이 됐어도 추후에 수정이 들어갔을 수도 있습니다. 깃허브 링크 안에 있는 코드와는 조건문의 차이로 오류가 발생하고 있었습니다 🙂
0

현재 제가 깃허브에 올려둔 수강생님의 코드 부분입니다.
다른점은 if문의 차이이고 보고 계시는 영상속에서 제가 해당 부분을 작업하지 않았다면 그 부분은 추후에 오류수정을 함께 진행하면서 작업했을 가능성이 있습니다..! 이 점 양해 부탁드리겠습니다..!
1
아 그렇군요, 같은 코드로 실행하는데 이슈가 발생해 계속 문제를 찾고 있었는데,
최신화 부분은 강사님 깃허브 소스를 참고하겠습니다.
추후 해당 회차 강의(섹션3. 근접공격 강좌의 약 27분경 부근)에서 이 문제를 겪으시는 분들이 계실 것 같습니다 !!.
굉장히 빠른 답변 감사드리며 좋은 강의 제공해주셔서 감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. 이상목 님.
NullReferenceException 오류는 Unity에서 빈 객체 참조를 처리할 때 흔히 발생하는 문제입니다. 질문주신 내용으로 유추해보면 FindClosestTarget 함수에서 타겟을 찾지 못해 오류가 발생하는 상황인 것 같습니다. 간헐적으로 Null을 반환하는 문제는 다양한 요인에서 발생할 수 있습니다. 이 문제를 해결하기 위한 몇 가지 방안을 제안드리겠습니다.
문제분석 및 원인
- 타겟팅이 불규칙적으로 Null을 반환하는 경우:
- 스크립트에서 플레이어 목록을 올바르게 초기화하지 않거나, 업데이트 중에 플레이어 객체가 삭제되어 참조를 잃었을 가능성이 있습니다.
Update메서드 내에서FindClosestTarget함수가 너무 자주 호출되면서, 플레이어 객체들이 제대로 갱신되지 않은 상태에서 접근하려고 했을 때 발생할 수 있습니다.
- 스크립트에서 플레이어 목록을 올바르게 초기화하지 않거나, 업데이트 중에 플레이어 객체가 삭제되어 참조를 잃었을 가능성이 있습니다.
해결 방안
타겟 리스트 초기화 및 갱신 확인:
Spawner혹은 관련 매니저 클래스에서 플레이어 리스트를 일관되게 유지하고 초기화해주세요. 예를 들어, 게임 시작 시점이나 새로운 플레이어가 추가될 때마다 리스트를 갱신하는 코드를 작성하세요.
제대로 초기화 되었는지 체크 및 길이 확인:
FindClosestTarget함수에서 플레이어 리스트가 비어 있지 않은지를 먼저 체크하고, Null이 반환되지 않도록 방지하는 코드 추가:
if (players == null || players.Count == 0) { Debug.LogWarning("플레이어 리스트가 비어 있습니다."); return; // 또는 기본 동작 정의 }에러 방지를 위한 조건 처리:
FindClosestTarget함수 내에서 타겟이 유효한지를 항상 체크하고 설정하기 전 모든 참조가 올바른지 확인합니다.
if (currentTarget == null) { currentTarget = DefaultTarget(); // 또는 적절한 기본값 반환 }
기존 질문 및 해결 방법 열람
유사한 문제에서 기존 수강생들이 비슷한 문제를 해결한 방안을 보시고 참고하실 수 있습니다:
- 애니메이션 점프 적용되지 않는 문제
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
코드 관련 질문
0
31
2
39. Main화면 추가 UI 에서 자료는 어디서 받나요??
0
40
1
cleric.fbx 파일을 열 수 없다는 에러가 뜹니다
0
69
2
강의 15분에 질문드립니다
0
72
2
교육자료 마젠타색
0
70
1
26분에 질문 드립니다
0
66
1
코인 획득 강의 질문입니다.
0
71
2
시간이없어서 빠르게 공부하게 프로젝트 공유좀 부탁드려요
0
109
2
TextMeshPro, TextMeshProUGUI, 그리고 Text의 차이점이 궁금합니다
0
130
1
피격테스트 30:20
0
61
1
구현 문의
0
79
1
안녕하세요! 게임개발 협업관련해서 질문드립니다!
1
159
2
Pool_Mng, Base_Mng 참조
0
109
3
CSV대신 DB
0
90
2
DB 관련 궁금한 점이 있습니다.
0
80
2
네이밍 컨벤션 질문
0
88
2
Dice Prefab
0
80
2
State Pattern #6 (Dead) 챕터의 Spawner.m_Players.Add(this); 문의드립니다.
0
62
1
혹시 섹션별 스크립트 소스 있으신지요?
0
125
2
Firebase 웹에서 값 변경 후
0
84
1
Material 파일이 깨지는거 같아요
0
166
2
절전모드 카메라 끄는 것
0
80
1
프로젝트 파일 공유 가능할까요?
0
184
2
프로젝트 관련 질문
0
95
1





