[플레이어 점프 시키기]
플레이어의 달리는 애니메이션까지 완성되었으니 플레이어가 점프할 수 있도록 하겠습니다.
플레이어의 점프는 애니메이션을 이용하여 만들 수 있으나 사용자의 입력과 상호작용해야 하므로 스크립트를 이용하여 점프를 구현하겠습니다.
먼저 하이어라키뷰의 runner를 선택하고 Rigidbody2D 콤포넌트를 추가합니다.
runner의 Rigidbody2D에서 Freeze Rotation의 체크박스에 체크해 줍니다.
이 부분을 체크해 주지 않으면 캐릭터가 회전하는 경우가 발생합니다.
runner에게 Box Collier 2D 콤포넌트를 추가 하겠습니다.
생성된 콜라이더의 크기를 조절해 줍니다.
Script 폴더에 스크립트를 하나 만들어 주고 스크립트의 이름을 CsRunner 로 바꿔줍니다.
만들어준 CsRunner 스크립트를 작성해 줍니다.
작성해준 CsRunner 스크립트를 하이어라키뷰의 runner에게 드래그해서 넣어줍니다.
그리고 하이어라키뷰의 runner를 선택해서 jumpVelocity의 y값을 설정해 줍니다. (이 값을 이용해서 점프한 높이를 조절할 수 있습니다.)
자, 이제 게임을 실행해 보시면 제대로 작동이.... 안될겁니다!
왜냐하면 바닥과 충돌하여 바닥밑으로 떨어지지 않게 해야 하는데 ground에 콜라이더가 없어서 충돌이 안되기 때문입니다.
그렇다면 하이어라키뷰에 만들어두었던 두 개의 ground에 Box Collider 2D를 만들어 주겠습니다.
하이어라키뷰에서 Ground하위에 있는 ground를 하나 선택하고 Box Collider 2D를 추가합니다.
추가된 Box Collier 2D 의 사이즈를 조절합니다.
나머지 다른 ground도 똑같이 BoxCollider 2D를 추가해주시면 됩니다!
그리고 또 한가지 추가 작업이 있습니다.
Tag를 추가해야 합니다.
콜라이더에 의해서 충돌이 되었을 때 충돌 된 개체를 식별하기 위해 Tag를 사용하는 방법을 많이 사용합니다.
그럼 Tag를 추가해 보겠습니다.
먼저 아까 Box Collider 2D를 추가한 ground를 하나 선택하고 인스펙터창을 보시면
이미지와 같이 인스펙터뷰의 상단에 Tag라고 적혀 있고 그 오른쪽에 버튼이 하나 있습니다.
이 버튼을 누르면 리스트박스가 나타나고 리스트박스에서 가장 아래에 Add Tag를 선택합니다.
자, 그럼 인스펙터뷰가 바뀌었을 겁니다. 실수로 빈 곳을 클릭하여 인스펙터뷰의 내용이 사라져도 위와 같은 방법으로 다시 접근하시면 됩니다.
사실 이 인스펙터는 처음에 Sorting Layer를 추가했던 것과 같은 인스펙터 입니다.
여기서 Tag와 Sorting Layer, Layer목록을 설정할 수 있습니다.
저희는 Tag를 추가해야 하므로 Tags 의 리스트박스 밑에 플러스 모양 버튼을 눌러 Tag 리스트를 하나 추가 합니다.
그리고 추가된 Tag에 Ground 라고 적어줍니다.
이제 Tag의 추가가 완료 되었으니 두 개의 ground에 태그를 적용시키겠습니다.
하이어라키뷰의 ground(Ground의 하위 개체)를 선택해 주시고 인스펙터 창에서 Tag 리스트를 열어보시면
이미지와 같이 아까 추가한 Ground가 들어가있는 것을 볼 수 있습니다. 이 것을 선택하시면 태그가 적용됩니다.
Tag를 새로 만들어줘도 태그 리스트에 추가만 될 뿐 오브젝트에는 태그가 적용되지 않으니
꼭 다시 태그를 적용할 오브젝트를 다시 선택해서 태그를 적용시켜주셔야 합니다.
나머지 다른 ground에도 Tag를 적용시켜 주세요!
이제 다시 게임을 실행시켜 보시면 캐릭터가 떨어지지 않는 것을 볼 수 있습니다.
또한, 스페이스키나 마우스 왼쪽 버튼을 누르시면 점프하는 것도 볼 수 있습니다.
[적 만들기]
플레이어의 움직임까지 완료되었으니 이제 적을 만들어보도록 하겠습니다.
프로젝트뷰의 Sprite 폴더에서 bird1 스프라이트를 드래그해서 하이어라키뷰에 놓습니다.
(스프라이트가 생성되지 않았다면 꼭 해당 이미지를 클릭하고 Texture Type을 Sprite(2D and UI)로 설정해 주세요.)
그리고 하이어라키뷰에 생성된 bird1을 선택하고 Position을 0, -2.6, 0으로 해주시고 Sorting Layer를 Enemy 로 설정해 주세요.
바로 Add Component 버튼을 눌러 Box Collider 2D 를 추가해 줍니다.
추가된 Box Collider 2D의 사이즈를 조절하고 Is Trigger 체크박스에 체크합니다.
(Is Trigger를 체크하게 되면 충돌은 인식이 되지만 물리적 반응은 보이지 않습니다.
또한, 충돌되었을 시 발생되는 콜백함수도 다릅니다. (OnTriggerXXXX() 발생))
여기까지 하시고 게임을 플레이 해보시면 bird1은 가운데에 가만히 있고 움직이지 않겠죠?
그럼 이제 스크립트를 새로 만들어서 적이 배경과 바닥과 같이 플레이어의 방향으로 이동할 수 있도록 하겠습니다.
프로젝트뷰의 Script 폴더에 새로운 스크립트를 만들어주세요.
새로 만들어진 스크립트의 이름을 CsEnemy 로 바꿔줍니다. (이제 스크립트 생성은 다 아실거라 생각됩니다 ㅎㅎ)
이제 CsEnemy 스크립트를 작성해 주시면 됩니다.
작성이 완료된 CsEnemy 스크립트를 하이어라키뷰의 bird1에 적용시켜 줍니다.
게임을 실행해서 플레이 해보시변 bird1이 플레이어의 방향으로 이동하게 되는 것을 볼 수 있습니다.
하지만 플레이어와 충돌해도 아무 반응이 없다고해서 이상하다고 생각하지 마십시오.
Console창에 Collision! 이라는 메시지가 보인다면 정상 작동하는 것입니다.
제대로 된 충돌 처리는 나중에 스크립트 수정을 통해 적용시키겠습니다.
bird1을 만들었으니 bird2, bird3, bird4, bird5도 같은 방식으로 만들어 보시기 바랍니다.
스크립트는 만들어둔 CsEnemy하나만 사용하셔도 되고 따로 추가하셔셔 각각 적용시키셔도 됩니다. (움직이고 충돌만 되면 됩니다.)