오늘은 점프를 구현해보려고 합니다. 바로 실습하겠습니다. 일단 바닥을 생성합니다. Hierarchy에서 오른쪽 클릭해서 3D Object - Plane 합니다. 다음은 점프할 객체를 생성합니다. Cylinder를 이용하겠습니다. 3D Object - Cylinder 처음에는 약간 위로 떠있는 상태입니다. 그렇기 때문에 Cylinder의 초기 위치를 지정합니다. 다음은 Rigidbody를 추가합니다. 객체에 힘을 가해서 점프와 같이 보이게 하려고 합니다. 힘을 가다 보면 객체가 쓰러지는 현상이 발생할 수 있습니다. 이것을 방지하기 위해서 Rigidbody속성을 설정합니다. constaints(제약) 설정을 보시면 Freeze Rotation에 x, z를 체크합니다. x, z축으로 회전을 막는다는 의미입니다. 스크립트 추가 Cylinder에 스크립트를 추가합니다.
Rigidbody의 AddForce를 이용해서 객체에 힘을 가합니다. 객체의 위쪽 방향으로 5만큼의 힘을 가합니다. ForceMode.Impulse는 질량의 영향을 받으면서 힘을 가하는 옵션입니다. 옵션은 다음과 같습니다. Force rigidbody에 지속적인 힘 추가, 질량 사용. 스페이스키를 입력하면 객체가 점프하는 것을 볼 수 있습니다. 근데 스페이스키를 계속 입력하면 계속 점프를 하는 것이 확인됩니다. 점프 중에는 스페이스 입력을 받지 않게 하기 위해서는 다음과 같이 구현할 수 있습니다. Plane 오브젝트에 태그를 변경해야 합니다. 일단 태그를 추가하겠습니다. "Plane"라고 태그를 만듭니다. Tag를 Plane로 변경합니다. 그리고 스크립트를 수정합니다.
스페이스 키를 누를 때 점프 중이 아닐 때만 점프가 가능하도록 하고, AddForce함수가 호출되었을 때, 점프 중으로 m_bJumping 값을 true로 변경합니다. OnCollisionEnter함수를 사용해 오브젝트가 바닥과 충돌했을 때를 나타냅니다. OnCollisionEnter는 충돌했을 때 발생하는 함수입니다. 충돌한 오브젝트의 태그가 "Plane"일 때 m_bJumping 값을 false로 만들어서 점프가 가능하도록 합니다. 이렇게 구현하면 여러 번 점프가 불가능하도록 구현할 수 있습니다. |