Prosto

따라하는 유니티 2D 프로젝트ⓐ -11 본문

Programing/Unity 3D

따라하는 유니티 2D 프로젝트ⓐ -11

Prosto 2016.09.24 23:57

따라하는 유니티 2D 프로젝트ⓐ 강좌 열한 번째 시간입니다.

 

이번에 다룰 내용은 난이도 관련 내용입니다.

게임 진행 중 일정 수준까지는 난이도가 상승되도록 만들 것입니다.

여기서 프로젝트ⓐ는 게임 진행 중 자연스럽게 난이도 상승시킬 수 있는 부분이

게임 진행 속도(배경, 장애물 속도) 상승과 장애물의 수나 형태를 변경하는 게 있습니다.

우리는 난이도 상승을 장애물로 해볼 것입니다.

지금까지는 장애물이 아래에만 위치했지만.. 그러면 높이 점프하면 다 피할 수 있겠죠?

일정 시간이 경과하면 장애물이 위 아래 동시에 나와 통과하는 난이도를 올리도록 하겠습니다.

 

 

그럼 시작하겠습니다.

 

 

가장 먼저 저번에 작업했던 프로젝트를 실행합니다. 그리고 순서대로 직접 해보며 따라오시면 됩니다.

 

일단 문제점을 확인해볼까요? (게임에 편법이 존재하면 재미는 반감되겠죠?)

저렇게 타이밍 맞춰 높게 점프만 한다면... 게임오버가 되지 않죠?

이런 점을 가지고는 제대로 된 게임이라고 하기 힘들겠네요.

우리는 이점을 보완하고, 더 긴장감 있게 만들기 위하여

이번 11번 강좌의 작업을 하고 있습니다.

장애물이 위쪽에서 동시에 나올 수 있도록 이제부터 만들 겁니다.

 

 

먼저 어느 정도에 맞춰야 하는지 확인을 해봅시다.

이렇게 맞춰서 확인해본 결과

Position은 Y축으로  20이면 화면의 제일 상단이고,

Scale은 8이면 바닥부터 화면 상단까지네요.

 

(여기서 확인할 수 있는 게 또 있습니다.)

scale을 음수(-) 방향으로 할 경우 뒤집힌다는 점이죠.

이걸 이용해서 캐릭터 좌우 반전 시 x축을 1 -> -1으로 바꿔준답니다.

우리는 상하를 반전하니 음수방향으로 늘려주면

아래로 길어지는 거죠. (확인해보세요.)

 

자, 이렇게 Position - y 20, Scale - y -3으로 한 경우

화면 상단에서 장애물이 내려온 게 보이죠?

 

 

 

그럼 이제, 중요한 스크립트 작업을 해봅시다.

생각보다 많이 바꾸지 않아도 이렇게 만들 수 있습니다!

먼저 MoveMap.cs부터 합시다.

정보들을 토대로 알맞은 조건에 맞게 처리가 돼야겠죠?

 

여기서 쓰인 int addTimeCounter

타일이 추가되는 시점마다 1씩 증가되는 카운터입니다.

(별도로 시간초를 측정하는 코루틴을 만들까 했지만,

타일도 일정 간격을 가지고 생성되니..

있는 걸 사용하는 게 더 좋겠죠?)

 

이쪽이 어디 부분인지 아시겠나요?

타일이 제거하는 지점에 도착했을 때

장애물/보너스점수 생성 - 제거가 이루어지는 부분이죠?

이 부분에서 counter를 증가합니다.

 

그리고 조건문을 이용하여

해당 카운터가 5를 넘었다면.. 장애물 생성을 하나씩 더해주는 겁니다.

(여기서 중요한 부분은 조건tempLevel을 역으로 뒤집어서 -tempLevel로 썼다는 점이죠.)

 

 

기존의 스크립트를 수정하고 있습니다. 현재 AddedObs(int tileN, int level) 함수죠.

먼저 1번을 보시면

level이 양수일 때와 음수일 때로 나뉘었죠?

양수일 때는 기존과 같은 처리를 해주고,

음수일 때는 새로운 조건과 처리가 나오죠?

 

 

그 새로운 조건과 처리를 봅시다.(2)

먼저 tempVec.y = 20.0f;를 만들었습니다.

이 부분은 장애물 생성 시 position y를 설정해줄 부분이었죠?

여기를 20.0f로 바꿔준다면 활성화시킬 때 천장에 위치하겠죠?

하지만, 이것만으로 끝나면 안 됩니다.

사이 간격을 얼마나 남길 것인지도, 장애물이 위가 아닌 아래 방향으로 생성되는 것도 처리해줘야합니다.

 

 

2번 내부 부분은 주석으로 설명이 될 것 같습니다만.. 한 부분만 얘기하자면

level = -14 +9 - level;이 어떻게 나왔느냐..

일단 level은 0부터 0.5씩 증가하여 15가 되면 8이 됩니다.(scale Y)

8이 되면 화면 상단에 닿죠?

그렇다면 우리가 쓸 수 있는 범위는 0~15입니다.

여기서 추가로 장애물이 아무리 작아도 기본적으로 가지는 크기가 0.5(lv1)

그 장애물이 2개라면 1(lv2)를 빼고 계산 해줘야겠죠?

그래서 14가 나온 것입니다.(그리고 음수인 이유는 반대 방향을 향하기 위한 레벨 설정이니까요.)

 

나머지 중간의 9는 사이의 여유 간격입니다. (장애물 크기론 4.5가 되겠네요.)

 

그러면 14 - 9(간격) -level을 하면

레벨과 간격을 뺀 해당 장애물의 크기가 나오겠죠?

(그걸 음수방향으로 계산한 겁니다.)

 

나머지는 주석으로 충분하리라 생각됩니다.

 

 

이쪽 부분에 보면 for문 전에 조건이 하나 생겼죠?

우리가 이 앞의 사진에서 예외 처리할 때 level을 100으로 바꿔줬습니다.

그 100이라 해둔 예외가 여기서 처리되는 겁니다.

level이 100이면 장애물 생성이 안 되고 함수가 끝나겠죠?

 

 

다음으로 살짝 바꿔줄 부분은 역시 장애물 정보를 담고있는 부분입니다.

우리가 생성할 때 이 크기(높이)를 함수를 호출하여 했으니까요.

ObstacleInfo.cs의 SetObstacle(int lv) 함수를 수정해줍시다.

여기서도 lv이 기존과 같이 양수이면 그대로 처리,

음수일 때를 추가로 만들어줬습니다. (반대 방향을 향하게 말이죠.)

 

 

이렇게 바꿔준 후 실행하면 다음과 같으 결과를 확인할 수 있습니다.

장애물을 위 아래 나오게 하고, 갈수록 어려워지는

난이도 설정을 하는 게 생각보다는 오래걸리지 않았죠?

새로 함수도 만들고, 장애물 객체도 따로 만들고.. 그랬다면 오래걸렸겠지만

기존의 것을 활용하여 만든다면 이렇게 조금씩 바꿔주면

그대로 사용할 수 있게 됩니다.

(경우에 따라 다시 만드는 게 좋을 때도 있습니다.)

 

지금부터는 간격이 조금씩 늘어나는 걸 찍어둔 결과 사진들입니다. (3장)

 

 

이렇게 게임성을 높이는 작업을 해봤습니다.

실제로 만들고 플레이 해보면 조금 더 어렵기 때문에 긴장감이 생기는 것을 느낄 수 있습니다.

혹 다른 부분을 수정하고 싶은 게 있다면 수정해보고 이렇게 저렇게 바꿔보세요.

그렇게 하면서 실력이 많이 느는 경우가 많습니다!

아니면 유사한 방식의 게임을 만들어 보는 것도 좋고요!

 

 

지금까지 따라하는 유니티 2D 프로젝트ⓐ -11번 강좌를 보셨습니다.

이번 시간까지해서 유니티 2D 프로젝트ⓐ가 끝났습니다.

사실 9번이나 10번 BEST SCORE에서 끝내도 됐지만,

좀 더 게임다운 시점까지는 진행하고 싶었습니다.

(게임 개발하며 수정하는 방법도 보여주고 싶었고요.)

어떤가요 이제 게임 요소들은 거의 갖추고 있죠?

(화려한 효과들은 못 넣었지만요..) 

 

 

 

 

다음 유니티 2D 프로젝트ⓐ의 열두 번째 강의에서는..

이제 프로젝트ⓐ는 끝났지만,

후기와 함께 프로젝트ⓐ를 마친 후 어떤식으로 공부하면 좋을지,

그리고 간단한 팁 정도와 함께 12번 강좌까지 올리겠습니다.

(앞으로 할 프로젝트ⓑ에 대해서도..)

 

 

그동안 고생 많으셨습니다.

짧지만은 않았는데, 끝까지 따라오며 하나하나 해오셨으니

앞으로도 잘하실 수 있을 것 같네요.

 

이왕 보신 거 다음시간의 글까진 보시면 좋겠습니다.

그건 글이니 금방 보실 겁니다.

 

 

 

 

궁금한 점 있으시면 댓글이나 따로 메일로 질문하시면 시간되는 대로 답변드리겠습니다. ( 연락 )

3 Comments
댓글쓰기 폼