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

그럼날아봐님의 프로필 이미지
그럼날아봐

작성한 질문수

유니티(Unity)로 시작하는 게임개발: Part 3. 슈팅게임 개발

unlock Get Set 추가와 오류수정

코인이 없어도 해금이 되는데요 뭘 수정해야 할지 모르겠습니다.

해결된 질문

작성

·

307

1

위 스크린 샷은 위에서부터 차례대로 진행된 것을 캡처한 것인데요 코인이 없이도 unlock을 클릭하면 그냥 해금이 됩니다. 

맨 마지막 스샷이 Add Coin을 해서 코인을 획득한 것이구요.

캐릭터 이동까지는 어느 정도 이해하면서 따라갔는데 UI 들어오면서 부터는 무슨 말인지 몰라서 이해는 뒤로 하고 강의대로 따라서 실습하고 있었는데 코인 없이도 그냥 해금이 되더라구요. ㅠㅠ

이해를 했으면 어느 부분을 수정할지 알겠는데 이번에는 아예 통 이해를 못하는 바람에 어디를 손봐야할지 몰라서 질문 드립니다.

답변 5

1

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

슈팅게임을 만들어보는 것도 좋고 두번째 방법인 느리더라도 이해하고서 안보고 치는 연습을 하시는 것도 좋습니다. 

같이 병행해서 실행해도 괜찮습니다.

C# 후반부부터 다시 시작하더라도 정말로 시간이 오래 걸리지 않습니다. 정리한 내용을 연습하시면서 빠르게라도 모르는 내용이 있는지를 보면서 진행하시면 좋지 않을까 싶습니다. 블로그에 관련되어 올린 내용이 있으니 한번 살펴보시고요. 우선 UI 가 이해되지 않는 것은 클래스가 여러개가 많고 이것을 실행하지 않으면 UI 자체가 실행되지 않는 형태로 동작합니다. (예를 들어 스크롤뷰에서 컨텐츠 사이즈 피터가 무조건 붙어있어야 한다던지 하는 내용) 접근 방법이 조금 차이가 있는 겁니다. 그냥 이게 있어야 한다고 생각하고 동작을 살펴보시면 더 이해가 쉬울수도 있습니다. 

정리하면 UI 가 있는 내용을 적용하고 동작하는 형태라 이해하기 쉽지 않습니다. 우선 UI 라도 이해하고 넘어가야 가능할 거 같아요 

1

우와!! 엄청나게 상세한 답변 정말 감사드립니다!! 

코인과 관계없이 언락되는게 맞는거군요. 몇번을 다시 보고 똑같이 따라했는데 계속 코인 없이 해금이 되서 뭘 잘못한건가? 한참 고민해도 무슨 말이지도 모르겠고 그렇더라구요. 

실습하면서 이해가 안가는 부분들이 있어서  Part 2도 처음부터 에버노트로 정리해 가면서 다  들었구요 part 2 에 있는 구조체랑 클래스도 계속 보면서 연습하고 있습니다. 

막힌거 다시 뚫으려고 공부하다 보면 진도가 안나갈 것 같아서 이해 안되도 일단 끝까지 따라한 다음에 처음부터 다시 두번째 슈팅게임을  만들어보려고 계획하고 있었습니다. 그런데 이 방법 보다는 느리더라도 이해한 내용을 안보고 치는 연습을 하는 것이  더 나은건가요? 

달아주신 답변들을 통해 선생님께서 어떻게든 이해시키고 도와주시려는 마음이 느껴져서 감동입니다.

말씀대로 처음부터 다시 보면서 이해하고 연습하는 과정들을 다시 해보겠습니다.

다시한번 답변에 감사드립니다! 

1

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

질문을 다시 봤는데 UI 에서부터 실습만 하셨네요. 

차라리 한번 앞으로 돌아가서 보시는 게 나을것 같습니다. 지금까지 이해한 부분이 있으므로 많은 시간을 들이지 않고 지금 보시는 곳까지 돌아오는 것이 가능합니다. 다시 보시면 놓치는 부분이 틀림없이 있을 겁니다. 고생하시라고 말씀드리는게 아니고요. ㅠㅠ

원래 막히면 처음부터 보시는 것이 좋습니다. 저도 다른 거 공부할때 그렇거든요. 이해한 내용을 연습을 해서 안보고 치시는 연습을 하셔야 하고요. 이해가 안되는 내용은 연습해봐야 실력이 늘지 않습니다. 

Part2 C# 마지막에 있는 구조체, 클래스 메모리 구조를 한번 보시는 것도 좋을 것 같습니다. 좋은 밤 되세요~

1

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

그리고 현재 SetLock(0)을 하면 값이 0이 되어 해제되는 상황이고 SetLock(1) 을 실행하면 값이 1이 되어 잠금이 될 겁니다. lock 이 1이라는 소리가 잠금이라고 생각되어 변수를 이렇게 적었고요.  잠금은 사실 없죠. 하지만 SetLock(1) 을 실행하면 그렇게 됩니다. 

다르게 또 혼돈이 될만한 점은 메뉴아이템스크립트에 있는 id변수가 현재 ships[id] 가 되는 것인데 버튼이 눌리면 ships[id] 가 현재 선택된 비행기가 되므로 SetLock(0) 이 실행되는 것입니다. 구조체의 함수에 대한 이야기에 대한 설명을 나중에 강의로 추가하겠습니다.

잛게 우선 설명하자면 구조체의 함수도 변수처럼 구조체에 포함되어 있기때문에 ships[id].Unlock(0); 이 실행되면 현재 id 값을 가지고 있는 메모리의 구조체 하나(비행기 하나)의 내부 변수 locked 를 변경한다는 것입니다.

UI상에서 메뉴 아이템이 각각 있고 ships 배열이 있는데 id에 따라 각각 아이템하나당 ships[id] 하나가 1:1로 매칭되므로 버튼이 눌릴때 선택된 비행기 하나의 Unlock 이 실행됩니다. 

1

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

강의를 살펴보니 현재 코인과 관계없이 언락이 되는 것이 맞습니다. 돈을 추가해서 언락을 하는 동작을 하지 말았어야 하네요. 

나중에 다시 수정하도록 하겠습니다. 

locked 변수가 언락을 클릭했을때 변수가 0이 되는 것만을 살펴보고 있습니다. 그 값이 잘 저장 되었는지 플레이를 종료해서 실행했을때 값을 읽어오는 것을 실행하고 있고요. 현재는 돈이 없어도 클릭이 되면 해제가 되는 것이 맞습니다. 그리고 다시 실행되었을때 해제를 한 비행기는 unlock 이 잘 되어 있도록 실행되는 것이 맞고요. 

다음 다음 강의에서 CanUnlock 이라는 함수를 추가해서 비행기가 해금이 가능한지를 판단하는 함수를 추가하고 있습니다. 

현재는 그대로 해제가 되는 것이 맞고요. 이 강의에서 중요했던 것은 i-1 이라는 인덱스를 주어야 잘 처리된다는 거고요. 

우선 구조체를 이해하기 어려워서 그럴수 있으니 그림을 자세히 살펴보시고요. 

ship 의 구조체를 배열로 읽어오는데요. 엑셀파일에서 읽어오는 데이터도 있지만 locked 나 level 같이 파일에 저장되어 있는 데이터를 구성해서 읽어오고 있습니다. 이러한 값들이 다 ships 에 로드 되고요.

SetLock(0) 을 실행해서 ships 데이터에 있는 선택된 id의 비행기 하나의 데이터의 locked 가 값이 0으로 변합니다. (0이 해제)

우선 이 강의에서의 목표는 클릭을 하기전 locked 의 값을 살펴보고 SetLock(0) 을 실행하고 나서 print 를 해보았을때 locked 의 값이 잘 변경되었는지를 살펴보는 것입니다. 

이곳이 사실 어렵습니다. 이전챕터에서 구조체를 설명하다가 UI 를 설명하고 나서 다시 돌아와서 구조체와 아이템을 같이 보기 때문인것도 같습니다만 UI 가 없이는 unlock 을 구성할수가 없어서 이렇게 강의가 진행되었습니다. 

정 안되면 슈팅게임 만들기 1 - 구조체 생성및로드나 그 이전부터 한번 다시 보시고 데이터를 한번 노트에 그려보시는 것도 좋습니다. 

앞에 내용이 확실히 이해되지 않고 작성할수 없으면 다음 내용도 이해가 가지 않습니다.

그래도 안되시면 강의구성을 좀 변경하고 추가해서 조금 다르게 준비해보겠습니다. 감사합니다. 개인적으로 연락드릴께요.

다른 분들도 정 안되시면 연락주시면 최대한 도와드리겠습니다. 좋은 밤 되세요.

그럼날아봐님의 프로필 이미지
그럼날아봐

작성한 질문수

질문하기