LambFerret's Blog
#3 <스크립트 만들기 - 1 이동, 점프> 본문
우선은 저번 포스팅에서 이동 스크립트를 짜지 않았다는 것을 지금 확인했다. 원래는 모션과 스크립트를 번갈아가면서 봐야하는 초보기에 포스팅에서는 한 포스팅에 모션을 몰아서 작성하고 한 포스팅에는 스크립트를 몰아서 정리하려 했더니 더 번거로워 졌다.
우선은 내가 했던 이동 모션 작성 방법을 말해보겠다.
일단은 첫번째 방법으로는 speed를 지정한 후 transform.position값을 계속 변경하였다. 쉽게말하자면 속도만큼 좌표를 이동시킨 것이다. 당시에는 rotation고정하는 법도 몰라서 지정된 키보드를 누르면 강제로 그 방향만 바라보게도 만들었다.
먼저말하자면 몇번 써보고 바로 다른 방법이 있나 찾아볼정도로 구렸다. 이동이 부드럽지 못하고 공중에서 떨어질때 중력값도 계속 초기화되며 살짝살짝 벽을 뚫었다.
다음 방법은 키보드 방향으로 힘을 가하는 방식을 사용하였다.
이렇게 하면 모션이 매우 부드러워지지만 땅과의 마찰력이 전혀 없어보였다. 마치 빙판길 위에 있는 캐릭터를 보는듯 하였다. 중간의 if-else if 문에서는 최대 이동속도를 제한하기 위해 사용되었다. 화살표로 원하는 만큼 누르고 있다보면 속도가 무한정 늘어나기에 만일 최고 속도에 도달하면 그 최고속도로 일정히 유지되도록 만들었다.
따라서 결국 이런식으로 코드를 짜게 되었다.
우선 새로운 벡터인 playerDir를 만든다. 이 부분에는 플레이어가 어느 방향을 바라보고 있는지를 저장할 것이다. 따라서 플레이어가 보고있는 방향으로 움직이고 움직이고 난 후의 방향이 저장될 것이다. 그 부분을 바라보고 rb.AddForce로 움직임정도인 힘을 줄 것이다.
두번째로는 점프를 만들기로 한다. 너구리 게임을 해본사람은 알겠지만 정해진 거리만큼 정해진 속도로 점프뛰는 부분에서 난이도를 올리는 편이다. 따라서 점프 버튼을 누르면 일정거리, 일정속도로 고정이 되게 만들고 공중에서 추가적인 조작이 불가능하게 만들겠다.
점프는 고정된 값으로 뛰어야 하지만 그렇게 하면 x축 y축이 다른 정도로 뛰게 만들기 어렵기에 jumpX jumpY변수를 또 만들었다. 이를 playerDir 플레이어가 보는 방향에 따라 뛰는 방향을 다르게 주었다.
공중에서는 추가적인 조작을 하지 못하도록 막는것도 노력이 필요하였다. 게임을 플레이할때는 당연히 있는 기능인줄 알았던것이 너무 많았다..
일단은 너굴맨의 발바닥이 다른 Collider들과 접촉해있을 경우에만 키보드가 먹도록 해보겠다. 일단은 너굴맨에게 boxcollider2D를 하나 더 준다. 새로 생성된 박스에는 isTrigger를 체크한다.
위와 같이 isTrigger를 체크한 후 그 박스는 발바닥에 얇게 붙힌다. 좌우에서는 약간 떨어져야하는데 그 이유는 너굴맨의 옆구리가 다른 플랫폼과 겹치지 않게 하기위해서다.
이 isTrigger를 사용해보자
여기서 OnTriggerEnter2D는 유니티에서 주어지는 함수이다. Enter가 있다면? Exit도 있겠지
반대로 여기서 떨어지면 isAir를 true로 만든다. 이후
update부분에서 isAir상태가 false일 경우에만 move와 jump를 사용할 수 있게 만들었다.
제일 어려운 것들은 거의 전부 넘어갔다. 이제 함수짜는 법도 알고 사용해서 요소를 가지고 오는 방법을 안다. 다음 포스트에서 나머지 스크립트들을 짜보도록 하겠다.
'게임 개발 > #1 너구리 (2D 플랫포머)' 카테고리의 다른 글
#6 <스크립트 만들기 - 4 몬스터 AI> (0) | 2021.07.19 |
---|---|
#5 <스크립트 만들기 - 3 레벨 디자인> (0) | 2021.07.18 |
#4 <스크립트 만들기 - 2 사다리> (0) | 2021.07.18 |
#2 <애니메이션 만들기> (0) | 2021.07.12 |
#1 <2D 플랫포머 맵 제작> (0) | 2021.07.08 |