안녕하세요?


요즘 날이 너무 덮다 보니, 유니티5를 독학하는 데도 이래저래 지장이 가는 것도 사실은 사실입니다. 아무튼 간에 원래의 계획대로면 이번 포스팅에서 챕터9를 다 끝내고자 했는데, 그건 아무래도 분량이 생각보다 많아서 어렵겠다는 생각이 듭니다. 그래서 이번 포스팅에서는 약간의 코딩과 함께 플레이어 캐릭터의 움직임을 처리하는 것으로 포스팅을 하고자 합니다.



지난번 포스팅에서 만들어 둔 적이 있는 PlayerState.cs라는 스크립트를 열어서 위 스크린샷의 붉은색 박스 안에 있는 코드를 코딩하도록 합니다. 여기서 Input.GetMouseButton(0)는 마우스 오른쪽을 클릭하는 것을 의미하며, 모바일 기기로 유니티5의 프로젝트를 빌드하면, 화면을 터치하는 것으로 인식하게 됩니다.



다음에는 true나 false 둘중 하나로 떨어지는 isUP라는 bool타입의 변수를 선언해 주도록 합니다.



다음에는 항상 변해야 하는 상황에서는 마우스 우클릭이 되면 isUP가 true로 바뀌도록 해 주며, 그게 아니고 전혀 클릭을 하지 않으면 isUP가 false가 되는 상태가 되어라 라는 의미가 됩니다.



다음은 물리 기능을 이용한 이동처리를 위한 함수인 FixedUpdata() 라는 변수를 추가합니다. 이 변수명은 대소문자도 구분 한다고 하니, 입력할 때 조심을 해야 합니다. 일단 여기서는 함수를 추가 하기만을 합니다.



먼저 Player라는 게임 오브젝트에 Rigidbody 2D라는 컴포넌트를 추가하도록 합니다. 



다음은 이 Rigidbody 2D가 제대로 작동하기 위해서 PlayerState.cs에다가 위 스크린샷에 올려진 것 처럼 코딩을 하기 시작합니다. 그리고 이렇게 값을 두는 이유는............



위와 같이 FixedUpdate() 함수에다가 velocity값을 주기 위해서입니다. 이 값을 주면, 오브젝트를 특정한 방향으로 움직일 수 있는 것으로 보이는데, 여기서는 Vector2로 두면 첫번째는 X방향, 두번째가 Y방향을 의미하는 것으로 보입니다.



완성된 코드입니다. 이제 캐릭터는 그냥 놔두면 중력의 영향을 받아서 아래로 떨어지고, 마우스 우클릭을 하면 위로 상승하는 것을 볼 수 있습니다. 하지만 문제가 되는 것은 그냥 그대로 계속 놔두면 계속해서 아래로 떨어진다는 문제가 있습니다. 그래서 이번에는 바닥을 만드는 작업에 들어가 보도록 하겠습니다.



먼저 bg_sunset이라는 것을 드레그해서 Hierarchy뷰에 드롭합니다. 문제는 책에서와 달리 이 바닥면이 보이지 않는 다는 것이였습니다.


 

결국 하는 수 없이 Order in Layer를 숫자를 높여서 이 문제를 해결할 수 있었습니다.



다음으로는 이 바닥이 되는 게임 오브젝트에 Box Colliderr 2D를 만들어 주도록 합니다. 이걸 만들어 주는 것으로 부딪칠 수 있다는 것으로 만들어 주는 것입니다.



다음에는 위 스크린샷에 붉은색 박스를 친 부분에 들어가 있는 것처럼 사이즈와 오프셋을 지정하도록 합니다. 이것으로 바닥은 이제 제대로 사이즈가 갖추어진 딱딱한 물체가 되었다고 볼 수 있는 것으로 생각됩니다.



다음은 Player라는 게임 오브젝트도 충돌을 해야 하니까, Box Collider 2D를 지정하도록 합니다. 그리고 나서 다음은.....



위 스크린샷처럼 사이즈를 지정해 두도록 합니다. 이제 유니티5 상에서 실행을 시켜 보아서 제대로 작동을 하는 지 알아보도록 하겠습니다.



실행결과 제대로 캐릭터는 바닥에 닿은 채 더 이상은 떨어지지 않는  것을 확인할 수 있었습니다. 이것으로 이번 포스팅의 짧은 내용을 마치면서 다음 분량을 실습하는 데로 포스팅에 올리도록 해 보겠습니다.

+ Recent posts

티스토리 툴바