본문 바로가기
유니티5 독학 & 게임 제작

유니티5 독학하기 그 68번째 걸음-해결된 Play Again문제

by 인터넷떠돌이 2018. 8. 17.
반응형

안녕하세요?


드디어 Play Again을 게임오버 화면에서 눌렀을 때, 제대로 플레이가 되지 않던 문제를 어떻게 해결하는 데 성공했습니다. 그래서 이번 포스팅에서는 어떻게 해서 이 문제를 해결했는지에 대해서 주로 올리고자 합니다.



지난번 포스팅에 이어서 위 스크린샷과 같은 에러 메세지가 우선 뜨는데, 이것 때문에 뭐가 제대로 되지 안는다고 판단을 했습니다. 그래서 한번 인터넷에서 이 에러 메세지가 무슨 내용인지 알아보고자 합니다.



찾아보니, 배열에서 시작은 0이 되고, 마지막 인덱스는 N크기의 배열에서 N-1이라고 하는데, 즉, 배열의 크기에 비해서 더 큰 값을 요구해서 발생하는 에러라고 합니다. 그래서 배열의 크기를 잘못 정해서 발생한 문제라는 생각이 들었습니다.



그래서 배열.Count-1 이라는 식으로 해서 에러를 잡기는 잡았더니, 일단 카메라는 제 위치로 돌아오는 것을 확인까지는 할 수 있었습니다. 다만 여전히 발판이 생성되지 않아서 플레이어 캐릭터는 여전히 아래로 떨어졌습니다.



그래서 하는 수 없이 이번에는 AddPiece()라고 발판을 추가하는 메소드를 아예 이렇게 추가하려고 했습니다.




그렇게 해서 이렇게 발판이 생성이 되기는 되는데, 이전에 생겼는 발판의 끝에서 이어져서 나오는 것을 볼 수 있었습니다. 아무래도 생성된 포인트가 초기화 되지 않은 것이 문제라는 생각이 듭니다.



그래서 bool형식의 변수라고 false나 true를 취할 수 있는 reStartSwitch라는 변수를 만들어 주도록 합니다.



그리고 나서 이렇게 ReStageSetting()에서 이 변수를 true값으로 바꾸어 주도록 합니다.



그리고 나서 이렇게 따로 if문을 만들어서 두었고, AddPiece()가 끝나면 reStartSwitch는 false가 되도록 만들어 주었습니다.




하지만 그러도고 제대로 작동하지 않아서, 이번에는 || 라는 or 논리 연산자를 이용해서 pieces의 갯수가 0이거나, 혹은 reStartSwitch가 true일 경우 spawnPosition이 스타트 포지션이 되도록 만들어 줍니다.



이제서야 제대로 발판이 만들어 지는 것을 볼 수 있습니다.



위 동영상을 보시면 어느정도 제대로 게임이 진행이 되는 것을 확인할 수 있습니다. 그래서 게임을 다시 시작할 때 나오는 문제점은 어떻게 해결이 된 것을 확인할 수 있었습니다.


그런데 위에서 처럼 이런 에러가 나오는 것을 볼 수 있었습니다. 이 에러가 무슨 의미냐 하면, 바로 게임 오브젝트는 파괴가 되었는데, 계속해서 스크립트에서 엑세스를 하려고 해서 발생하는 에러라고 합니다.




이러한 에러를 방지하는 기법으로 위에서 처럼 if(게임오브젝트)라는 것이 있다고 합니다.



그래서 LevelGenerator.cs를 찾아 가도록 해 봅니다.



위 스크린샷에 나와있는 것처럼 if문에 파괴되는 게임 오브젝트인 oldestPiece가 존재할 경우에만 아래의 Destroy가 되는 것입니다. 아무튼 이것으로 어떻게 되기는 했지만, 여전히 허전하다는 느낌이 드는 것도 사실은 사실입니다. 어디가 문제가 되는 것일까요? 아하! 아무래도 사운드 관련된 문제가 빠졌는데, 이건 어떻게 할 수 있는지 일단 알아 보도록 해 보겠습니다.

반응형