작성
·
445
0
8분여 정도 몬스터 따라오기 실행시키는 가운데 아래와 같은 에러 메시지가 뜹니다.
NullReferenceException: Object reference not set to an instance of an object
MonsterController.UpdateMoving () (at Assets/Scripts/Controllers/MonsterController.cs:66)
BaseController.Update () (at Assets/Scripts/Controllers/BaseController.cs:54)
cs 66번째 줄은 nma.speed 줄이고
// 이동
Vector3 dir = _destPos - transform.position;
if (dir.magnitude < 0.1f)
{
State = Define.State.Idle;
}
else
{
NavMeshAgent nma = gameObject.GetOrAddComponent<NavMeshAgent>();
nma.SetDestination(_destPos);
nma.speed = _stat.MoveSpeed;
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(dir), 20 * Time.deltaTime);
}
BaseController cs 54는 UpdateMoving(): 줄입니다.
void Update()
{
switch (State)
{
case Define.State.Die:
UpdateDie();
break;
case Define.State.Moving:
UpdateMoving();
break;
case Define.State.Idle:
UpdateIdle();
break;
case Define.State.Skill:
UpdateSkill();
break;
}
}
무엇이 문제인지요?
답변 5
0
아직까지 따라가기 급급해서 전체적 맥락만 대략 파악하고 진도 나가고 있습니다. 다시 한번 학습하면서 브레이크포인트 등을 통해 세밀하게 복습해 나가겠습니다. 친절한 가르침 넘넘 감사드립니다. 불금되세요.
0
_stat = gameObject.GetComponent<Stat>();
이것이 저는
_stat = gameObject.GetComponent<PlayerStat>();
으로 되어 있었습니다.
이것을 샘과 같이 고쳤더니 더 이상 에러가 안뜹니다.
0
그 부분이 아닙니다.
float MoveSpeed는 애당초 단순 float라서 아무 문제가 없고
_stat = gameObject.GetComponent<Stat>();
하는 부분 바로 다음에 breakpoint를 걸고 _stat을 잘 찾는지를 확인하셔야 합니다.
아마도 Stat 콤포넌트가 없을 확률이 높습니다.
0
0
크래시가 나는 부분에 breakpoint를 걸고 디버깅을 해보시기 바랍니다.
null 크래시는 가장 빈번하게 발생하는 버그라서, 쉽게 찾으실 수 있을겁니다.
이런 문제는 반드시 스스로 찾는 연습을 꾸준히 해야 디버깅 속도가 빨라집니다.
코드를 빼서 테스트를 하기 보단 breakpoint를 걸고 유니티에 연결을 하신 다음
멈춰서 살펴보세요. _stat이 null이라거나, nma가 null이라거나 어떤 이유가 있겠죠!
_stat이 null이라면 다시 _stat을 채워주는 부분 코드에 가서 살펴보면 됩니다.
breakpoint 이렇게 해서 찾는 것이 맞는지요?
보니 _stat에 대한 MoveSpeed 구성원을 찾을 수 없다고는 말이 나오는데 무슨 말인지요?
제가 MoveSpeed를 규정하지 않아서 그런가요?
Stat.cs 보면 아래와 같이 선언되어 있는데요.
혹시 VS를 사용하시는게 맞나요?
그리고 stat이 null인 상황으로 보이는데,
위에서 _stat에 마우스를 갖다 대면 어떻게 나오는지 확인 후
stat을 채우는 코드에서도 bp를 걸어보세요.
ㅎㅎ 찾으셨다니 다행이고 다음 강의 만들 땐 디버깅을 더더더 강조해야겠군요.
스스로 코드 작업을 하실 땐 위와 같이 짜잘한 크래시가 많이 나는데
null 크래시 같은 경우에는 30초 이내로 원인 파악까지 끝낼 정도로 숙련이 되어야 합니다.
1) _stat에서 크래시 났다!
2) breakpoint 걸고 null 여부 확인
3) _stat 채우는 부분에서 breakpoint 걸고 확인
4) 해당 줄이 무엇이 문제인지 분석
요 스텝은 딱히 책에서 가르쳐주는 개념은 아니고,
스스로 버그마다 접근하는 요령이 생겨야 합니다.
그럼 힘내세요!