티스토리 뷰

반응형

Gamelog 12. 맵이 커졌다

너무 졸리지만, 일주일동안 안했기 때문에 열심히 해본다. 게임을 하면서 당연하다고 생각했던 기능들이 생각보다 하나하나 다 설정한 것이었다.

 

Gamelog 12. 맵이 커졌다

좁은 곳에서 구현을 하고 게임오브젝트가 계속 떨어졌었지만, 이번에는 맵을 더 키워서 구현해본다.

Gamelog 12_1. 마찰을 없애보자.

Unity Main Camera

지금은 카메라 안에만 구현을 해두었지만, 실제로는 이외의 부분을 다 사용할 수 있다. 게임에 보이는 부분만 저 카메라 안인 것이다. 즉, 더 넓은 스테이지를 만들 수 있다.

Main Camera가 플레이어와 함께 이동하는 것으로 가로 스크롤 게임이나 세로 스크롤 게임을 만들 수 있다.

void LateUpdate() {
    Vector3 pos = this.transform.position;
    pos.z = -10;
    Camera.main.gameObject.transform.position = pos;
}

Camera.main.gameObject로 메인 카메라에 액세스 할 수 있다.

또한 이 카메라는 '씬 상의 모든 게임 오브젝트가 이동을 끝낸 후' 움직여야 한다. 그렇지 않으면 게임 오브젝트가 뒤늦게 움직이고 화면 떨림이 발생할 수 있다.
따라서, FixedUpdate가 아닌 LateUpdate를 사용해야 한다.

Unity Scene

메인 카메라 밖의 부분까지 게임 맵을 확장시킨다. 확장시킬 때 왼쪽은 보통 시작지점으로 인식되기 때문에 짧게, 오른쪽은 길게 만들었다.

Unity Main Camera

카메라가 캐릭터를 쫓도록 스크립트를 적용한 후 실행시키면, 메인카메라의 범위만 보이게 된다.
하지만, 점프를 할 때 화면이 위로 이동하는 것은 가로스크롤과 세로스크롤이 병합한 형태이므로 고정하는 것이 필요하다.

void LateUpdate() {
    Vector3 pos = this.transform.position;
    pos.z = -10;
    pos.y = base_pos.y;
    Camera.main.gameObject.transform.position = pos;
}

pos.y = base\_pos.y를 통해 원래 위치의 y값을 기억해두고 고정시킨다.

Unity Main Camera

그러면 이렇게 가로스크롤로 고정된 게임을 만들 수 있다. 위는 막지 않았기 때문에 캐릭터가 이동은 된다.

 

Gamelog 12_2. 마찰을 없애보자.

Unity Friction

현재 게임은 벽에 붙은 채로 계속 앞으로 나아가면 벽에 붙어있게 된다. 마찰때문이며, 마찰을 없애서 벽을 매끄럽게 해야한다.

Unity Physics Material 2D

프로젝트 뷰에서 Physics Material 2D를 생성한다.

Unity No Friction

프로젝트뷰에 생긴 야구공모양 아이콘을 클릭하여 Friction을 0으로 변경한다.

Unity friction

부딪히지 않도록 바닥 오브젝트를 제외한 양옆 벽돌과 떠있는 벽돌에 모두 새로운 Asset을 적용한다.

Unity friction

벽이 미끌미끌해져서 더이상 마찰이 없도록 구현됐다.

 

Gamelog 12_3. 게임을 더 편하게

Unity Platform Effect

현재 Box Collider로 인해 이 블럭들을 뚫고 점프를 할 수 없다.
이때는 Platform Effect 2D 컴포넌트를 사용하여 아래에서 점프를 하면 뚫을 수 있고, 위에서는 내려올 수 없는 게임을 만들 수 있다.

Unity Platform Effector 2D

Platform Effector 2D 컴포넌트를 추가하고, 기존에 있던 Box Collider 2D에 효과를 적용하기 위해 Used By Effector를 적용한다.

Unity Platform Effector 2D

이렇게 표시가 되는데 사실 뭔지는 잘 모르겠다.

Unity Platform Effector 2D

그러면 이렇게 위에서 아래로 올라갈 수 있는 플랫폼 오브젝트가 완성된다.

 

반응형
댓글