인프런 커뮤니티 질문&답변

sehan님의 프로필 이미지

작성한 질문수

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

Data Manager #1

json 딕셔너리 관련

21.11.26 14:16 작성

·

230

0

Json을 딕셔너리로 담는걸 제가 응용해서 한번 쓰려고 이것저것 해보는중인데요!

항상 다른 스크립트에서 

예를 들어 data 라는 싱글톤이 있고, 그 안에서 json을 불러와서 딕셔너리로 바꿔준 후 이걸 다른 스크립트에서 사용하기 위해

data.mondict[101].hp

이런식으로 불러오려고 하면 키를 찾을수없다고합니다...

키 , out value 를 써봐도 널값만 뜹니다...

웃긴게 파싱? 한 스크립트 내에서는 잘 써진다는건데...

제가 놓치고 있는 게 있을까요?

답변 1

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

2021. 11. 26. 14:30

위 내용만으로는 알 수 없습니다.
그리고 코딩하면서 뭔가 생각처럼 안될 때는 
그냥 반사적으로 디버깅을 하실 생각부터 하셔야 합니다.

data.mondict를 로드하는 부분에 breakpoint를 걸고
데이터가 잘 파싱되는지 확인이 먼저 필요할 것 같네요. (101 키가 진짜 없는지)

sehan님의 프로필 이미지
sehan
질문자

2021. 11. 26. 16:16

루키스님의 조언에 따라 잊고만 있던 디버깅을 해보려고 강의까지 다시 듣고 왔는데요..

제가 디버깅 이해를 못한건지..뭔가 값도 안 뜨고 f10 , f11을 눌러도 별다른 반응이 없더라고요..

 

그래서 다시 디버깅 강의를 듣는 도중에 다른 스크립트를 또 하나 만들어서(2번째 사진) 해보니 2번째 사진에서는 키값을 제대로 받아오더라구요..?

 

그런데 1번째 사진에서는 암만해도 값을 못 받아오던데..물론 아직 공부가 부족해서 그러겠지만..제가 놓치고 있는 게 있을까요?

 

 

Rookiss님의 프로필 이미지
Rookiss
지식공유자

2021. 11. 26. 19:59

별 반응이 없다는게 어떤 의미인지 모호한데요.
혹시 DataManager에서 MonsterDict로드하는 부분은 잘 실행되고 있나요?

sehan님의 프로필 이미지
sehan
질문자

2021. 11. 26. 20:15

별 반응이 없다는 건 아무래도 제가 디버깅 이해를 제대로 못 한건지...원하는 값을(여기서라면 키값이겠네요!) 검색을 못 하는 것 같습니다...

이 부분은 제가 디버깅에 대해 좀 더 공부를 하면 될 거 같습니다...

 

아래는 제가 혼자서 공부용으로 가볍게 만들어본 DataManager  (이름만 다르고 용도는 같습니다!) 인데요!

여기서는 다 잘 불러와집니다 ㅠㅠ..그런데 꼭 다른 스크립트에 사용하려고 하면 키값을 찾을 수 없다고 오류를 띄우네요...(위의 두번째 사진에서는 또 불러와지는데 코드를 그대로 복붙해서 다른 스크립트에 넣으면 마찬가지로 키값 오류를 띄웁니다...

Rookiss님의 프로필 이미지
Rookiss
지식공유자

2021. 11. 26. 20:36

버그는 눈으로 찾는게 아니라 무조건 디버깅으로 찾아야 합니다.
위 내용만으로는 저도 알 수 없습니다.
연습문제라 생각하고 더 고민해보시고
오랫동안 고민해도 해결이 안 되면 rookiss@naver.com 로 압축해서 보내주세요.

sehan님의 프로필 이미지
sehan
질문자

2021. 11. 26. 20:57

혼자 2주 가까이 구글링이며 온갖 강의들을 봤는데도 해결이 안되서..ㅠㅠ
따로 문제가 되는 부분만 프로젝트로 보냈습니다..!

Rookiss님의 프로필 이미지
Rookiss
지식공유자

2021. 11. 26. 21:03

전체 프로젝트 압축해서 보내주세요 설정이 너무 귀찮습니다 ㅎㅎ

sehan님의 프로필 이미지
sehan
질문자

2021. 11. 26. 21:24

번거롭게 해서 죄송합니다!
다시 보내드렸습니다!

Rookiss님의 프로필 이미지
Rookiss
지식공유자

2021. 11. 26. 22:16

안녕하세요.
확인해봤는데 아직 디버깅에 대한 이해도가 부족하신 것 같아 step by step으로 설명 드립니다.

위에 breakpoint를 잡고

MonsterData쪽에도 breakpoint를 잡은 상태입니다.


Unity에 연결을 누릅니다.

그리고 유니티에서 Play를 해보면

breakpoint가 잡히는데 MonsterData 로드하는 코드보다
Monster3.cs 코드가 먼저 잡히고 있습니다.

그리고 살펴보면 Count = 0으로 아예 데이터가 없는 상태입니다.
여러 GameObject가 있을 때는 어떤 애가 먼저
Start가 실행될지 미정이기 때문에 발생한 문제입니다.

MonsterData 쪽 코드가 더 먼저 실행되도록
Start보다 먼저 실행되는 Awake로 수정해보시기 바랍니다.



sehan님의 프로필 이미지
sehan
질문자

2021. 11. 26. 22:40

와...Awake 나 Start나 별차이 없는 줄 알았는데..이런 큰 차이가 있었군요...

 

그리고 디버깅 모드의 사용법마저 한방에 제대로 이해됐습니다..

 

너무 훌륭한 답변덕분에 혼자서 끙끙대던 시간이 바보처럼 느껴져서 조금 웃기네요.

 

사진별로 단계별  설명 해주신거 정말 감사합니다! 덕분에 한번에 바로 다 이해됐습니다!

 

저와 비슷하게 고민하는 다른분들에게도 이 답변이 도움이 되었으면 좋겠습니다!

 

정말 감사합니다!

sehan님의 프로필 이미지

작성한 질문수

질문하기