• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

오류 관련 질문

21.05.21 15:52 작성 조회수 940

0

수업을 보면서 똑같이 코드를 작성했는데 2가지 오류가 발생하여 질문드립니다.

1.

[오류문구]

NullReferenceException: Object reference not set to an instance of an object

MenuItemScript.SetUI (System.String shipName, System.String shipLevel, System.String shipDmg, System.String shipNextDmg, System.Int32 locked, System.Single unlockCoin) (at Assets/02_Script/MenuItemScript.cs:23)

MenuManager.Start () (at Assets/02_Script/MenuManager.cs:24)

[행동]

오류를 확인하기 위하여,

(1) MenuItemScript.cs:23

code: unlockCoinText.text = unlockCoin.ToString();

(2) MenuManager.cs:24

code: curItem.SetUI(ship.name, ship.chr_level.ToString(), ship.dmg.ToString(), ship.nextDmg.ToString(), ship.locked, ship.unlockCoin);

를 확인해봤지만 특별히 문제될만한 부분은 없었습니다.

2.

[오류문구]

ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.

Parameter name: index

System.ThrowHelper.ThrowArgumentOutOfRangeException (System.ExceptionArgument argument, System.ExceptionResource resource) (at <eae584ce26bc40229c1b1aa476bfa589>:0)

System.ThrowHelper.ThrowArgumentOutOfRangeException () (at <eae584ce26bc40229c1b1aa476bfa589>:0)

System.Collections.Generic.List`1[T].get_Item (System.Int32 index) (at <eae584ce26bc40229c1b1aa476bfa589>:0)

ScrollViewSnap.Update () (at Assets/02_Script/ScrollViewSnap.cs:36)

[행동]

오류를 확인하기 위하여, 

(1) ScrollViewSnap.cs:36

code: float item1Pos = item[1].GetComponent<RectTransform>().anchoredPosition.x;

를 확인해봤지만 특별히 문제 될만한 부분은 없었습니다.

특히 해당 부분은 이번 강의와 상관이 없는 부분으로 보이는데, 기존까지 강의 대로 실행하는 과정에서 전혀 문제가 되지 않다가, 이번 강의 코드를 작성하는 과정에서 발생하였습니다.

혹시 오타가 있을까 싶어, 강의를 4-5번 돌려가면서 코드 오타를 확인했고 오타는 전혀 없는 상황입니다. 

어떤 부분에서 제가 실수했는지, 또 오류가 있는것인지 궁금합니다. 

현재 상황은 

id: 2 base_dmg: 2 name: Bomber kName: 폭격기 unlockCoin: 5000 chr_level: 1 locked: 1 dmg: 2 nextDmg: 4

UnityEngine.Debug:Log (object)

Game.ShipData:Show () (at Assets/02_Script/GameData.cs:43)

GameDataScript:Start () (at Assets/02_Script/GameDataScript.cs:73)

이렇게, unlockCoin을 제대로 읽는 것까지는 수월하게 잘 되는데, 그 이후 과정에서 오류가 발생하는 것 같습니다.

해당 부분은 이미지로 캡쳐해서 드리겠습니다.

답변 6

·

답변을 작성해보세요.

1

안녕하세요. 오류 확인하였습니다. 

스크롤뷰 안에 있는 숨겨져 있는 메뉴아이템에서 unlockcoinText 가 연결이 되지 않아서 그렇습니다. 

사실 이런 오류를 찾는게 어려운데요. 

디버그를 통해서 찾을 수 있습니다.

SetUI 에서 오류가 있다고 해서 로딩 부분의 이곳저곳에 브레이크 포인트를 잡고서 한줄씩 따라가 보다가요. 

다음과 같이 죽는 부분의 변수들을 살펴보시면 unlockCoin 이 null 이 된 걸 볼수 있거든요. 

그래서 스크롤뷰 안에 있는 메뉴아이템으로 가서 숨겨진 저희의 아이템을 확인해본 겁니다. 

아래 보시면 마우스로 드래그 해보았을때 nextDmgText 의 경우 UI.Text 이렇게 값이 있죠.

이 아래에 마우스로 호버해보시면 unlockCoinText 는 null 로 되어 있습니다. 

연결이 안되어서 이렇게 된거죠.

사실 이것 때문에 연결을 사용하지 않고 귀찮기는 하지만 

코드에서 find 로 레퍼런스를 찾는게 좀 더 좋지 않나 생각이 들기도 합니다.

그냥 수정하시는 것보다는 한번 디버그로 따라가 보시고 숙달시키면 좋을 것 같습니다. ^^

감사합니다. 

0

친절한 답변 너무 감사합니다!

0

네 발송해드렸습니다. 감사합니다. 

0

아 그렇군요. 

스크롤뷰 스냅에서 인덱스가 맞지 않다고 하는것 같은데요.

오류상황만으로 확인이 조금 어려울 것 같습니다. 

작업하신 프로젝트를 한번 보내주실수 있으실까요?

폴더 전체 압축해서 보내주시면 확인하고 답변 드릴께요 

sun5022@naver.com 입니다. 

0

답변해주셔서 감사합니다. 

다만, 다음 강의를 들어보니 저에게 발생하는 오류랑은 상관이 없는 내용인것 같습니다.

또한, 추천해주신 beyond compare라는 프로그램의 경우 사용방법이 어려워서, 올려주신 코드를 직접 다운받고 비교해보았는데도 오타 부분을 발견하지 못했습니다.

혹시 어떤 부분에서의 오류인지 알 수 있을까요? 

현재는 해당 오류로 인하여, 게임 실행 자체가 안되고 있는 상황이라 이 다음 강의를 진행할 수가 없는 상황입니다! ㅠ

감사합니다.

0

안녕하세요. 최형선입니다.

이 내용이 다음시간에 바로 수정하는 것 같아 보이는데요. 

혹시 다음 시간의 내용을 보시고 적용이 가능할까요?

이번시간의 코드에 오류가 있어서 다음시간에 수정했습니다. 

unlock 코인의 인덱스에 오류가 있어서 수정했습니다. 

그리고 강의의 오른쪽을 보시면 코드가 있는데 다운로드가 가능하니 비교를 해보는 것도 좋습니다. 

beyond compare 라는 것이 있는데 소스코드 비교에 좋습니다. 

확인하시고 나서 다음 강의의 내용을 수정한 상태에서도 오류가 발생되면 다시 살펴보도록 하겠습니다. 

감사합니다.