inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진

몬스터 AI #2

오류

577

최원준

작성한 질문수 9

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;

}

}

 

무엇이 문제인지요?

C# unity

답변 5

0

최원준

아직까지 따라가기 급급해서 전체적 맥락만 대략 파악하고 진도 나가고 있습니다. 다시 한번 학습하면서 브레이크포인트 등을 통해 세밀하게 복습해 나가겠습니다. 친절한 가르침 넘넘 감사드립니다. 불금되세요.

1

Rookiss

ㅎㅎ 찾으셨다니 다행이고 다음 강의 만들 땐 디버깅을 더더더 강조해야겠군요.

스스로 코드 작업을 하실 땐 위와 같이 짜잘한 크래시가 많이 나는데
null 크래시 같은 경우에는 30초 이내로 원인 파악까지 끝낼 정도로 숙련이 되어야 합니다.

1) _stat에서 크래시 났다!
2) breakpoint 걸고 null 여부 확인
3)
_stat 채우는 부분에서 breakpoint 걸고 확인
4) 해당 줄이 무엇이 문제인지 분석

요 스텝은 딱히 책에서 가르쳐주는 개념은 아니고,
스스로 버그마다 접근하는 요령이 생겨야 합니다.

그럼 힘내세요!

0

최원준

_stat = gameObject.GetComponent<Stat>();

이것이 저는

_stat = gameObject.GetComponent<PlayerStat>();

으로 되어 있었습니다.

이것을 샘과 같이 고쳤더니 더 이상 에러가 안뜹니다.

0

Rookiss

그 부분이 아닙니다.
float MoveSpeed는 애당초 단순 float라서 아무 문제가 없고
_stat = gameObject.GetComponent<Stat>();
하는 부분 바로 다음에 breakpoint를 걸고 _stat을 잘 찾는지를 확인하셔야 합니다.
아마도 Stat 콤포넌트가 없을 확률이 높습니다.

0

최원준

Monstercontroller.cs 위에 마우스를 가져가면 아래와 같이 나옵니다.

맥용 비주얼스튜디오 사용중입니다.

스크린샷 2022-09-16 오후 2.02.35.png스크린샷 2022-09-16 오후 2.02.42.png

0

Rookiss

크래시가 나는 부분에 breakpoint를 걸고 디버깅을 해보시기 바랍니다.
null 크래시는 가장 빈번하게 발생하는 버그라서, 쉽게 찾으실 수 있을겁니다.
이런 문제는 반드시 스스로 찾는 연습을 꾸준히 해야 디버깅 속도가 빨라집니다.

0

최원준

nma.speed = _stat.MoveSpeed;

이 부분을 빼니깐 되네요. 제가 몬스터를 다른 것을 가져와 붙여서 그런가요?

0

Rookiss

코드를 빼서 테스트를 하기 보단 breakpoint를 걸고 유니티에 연결을 하신 다음
멈춰서 살펴보세요. _stat이 null이라거나, nma가 null이라거나 어떤 이유가 있겠죠!
_stat이 null이라면 다시 _stat을 채워주는 부분 코드에 가서 살펴보면 됩니다.

0

최원준

스크린샷 2022-09-16 오후 1.56.04.pngbreakpoint 이렇게 해서 찾는 것이 맞는지요?

보니 _stat에 대한 MoveSpeed 구성원을 찾을 수 없다고는 말이 나오는데 무슨 말인지요?

제가 MoveSpeed를 규정하지 않아서 그런가요?

Stat.cs 보면 아래와 같이 선언되어 있는데요.

스크린샷 2022-09-16 오후 1.59.25.png

0

Rookiss

혹시 VS를 사용하시는게 맞나요?
그리고 stat이 null인 상황으로 보이는데,
위에서 _stat에 마우스를 갖다 대면 어떻게 나오는지 확인 후
stat을 채우는 코드에서도 bp를 걸어보세요.

UI 기능 관련 질문이 있습니다!

0

24

2

픽셀 좌표 스크린 좌표

0

26

0

전체적으로 코드 읽는게 굉장히 오래 걸리네요...

0

67

2

카메라 #2 수업 캐릭터 쓰러짐 해결

0

79

1

플레이어 움직임이 끝날때, 기울어짐 현상

0

81

1

Input 적용과 관련하여 질문 있습니다.

0

72

1

디버그 불가.. Unity에 연결 불가

0

76

1

달리기 애니메이션 에러

0

85

2

오랜만에 게임을 만들다가 사운드 관련해서 뭔가 궁금한게 있어서 봤습니다

0

63

1

GetKey 오류

0

108

2

에셋을 어디에 올려두신지 알 수 있나요?

0

104

1

재귀호출? 오류나는데 왜 이래요 ?

0

167

6

Animation blending 파라미터 계산

0

65

1

newPos와 to지점이 겹쳐져야 하는거 아닌가요?

0

94

3

오브젝트 복제하니까 자꾸 이런게 뜨면서 꺼집니다

0

85

2

질문있습니다

0

142

2

아 이거 소스코드 같은거 없나요?

0

140

3

질문 드립니다. string.IsNullOrEmpty(name)

0

85

2

@Managers 가 씬에 배치되어 있어도 문제가 되지 않나요?

0

133

2

유니티6 NavMesh 안되는분들

1

174

1

Unity6 Unity-Chan Material 마젠타 문제 해결법

7

524

1

GetComponent<Poolable> 질문드립니다.

0

99

2

UI 불러오지 못함

0

116

2

UI 자동화 #1 - Util.cs의 FindChild함수에서 component.name에 컴포넌트 이름이 뜹니다.

0

152

2