점프를 구현하기 위해서는 제어할 객체에 Rigidbody 2D가 존재해야 한다.

그래야 Rigidbody2D 내부 명령어로 점프에 관한 처리가 가능하기 때문.
public class Jump : MonoBehaviour
{
Rigidbody2D rigid;
public int jumpPower;
// 게임 실행 시 (혹은 오브젝트 활성화 시) 최초 1회 실행되는 유니티 이벤트 함수
void Start()
{
rigid = GetComponent<Rigidbody2D>();
}
// 매 프레임마다 1회씩 실행되는 함수.
void Update()
{
if(Input.GetKeyDown(KeyCode.Space))
{
rigid.AddForce(Vector2.up * jumpPower * ForceMode2D.Impulse);
}
}
}
※ 키보드 입력
· Input.GetKeyDown : 키를 한 번 눌렀을 때 true를 반환
· Input.GetKeyUp : 키를 누르고 뗐을 때 true를 반환
· Input.GetKey : 키를 누르고 있을 때 true를 반환
※ Rigidbody2D.AddForce
· AddForce(힘의 방향 * anyPower * 힘을 가하는 방식)
· 힘의 방향만 있으면 아무것도 발생하지 않기 때문에 값을 넣어준다.
· Impulse는 폭발적인 묘사를 하고 싶을 때 쓰는 ForceMode.
여기서 Space를 연타하게 되면 일정한 높이의 점프가 구사되지 않는게 확인된다.
그 이유는 rigidbody를 가지고 있는 모든 객체가 중력에 영향을 받기 때문이다.
중력에 영향 받게되어 속력이 존재하게 되는데, 점프의 처리과정에 이 힘이 연산되기 때문에 일정한 높이의 점프를 할 수 없게 되는 것이다.
void Update()
{
if(Input.GetKeyDown(KeyCode.Space))
{
// rigid의 속력값을 zero로 초기화
rigid.velocity = new Vector2.zero;
rigid.AddForce(Vector2.up * jumpPower * ForceMode2D.Impulse);
}
}
간단하게 키입력 처리부분에서 rigid.velocity = new Vector2.zero라고 선언해주면 space를 누를 때 마다, 속력값이 초기화되어 일정한 힘으로 점프하는 것을 확인할 수 있다.
'Unity > Unity2D' 카테고리의 다른 글
| Unity2D_Week2 : Property (0) | 2021.12.09 |
|---|---|
| Unity2D_Week1 : Coroutine (0) | 2021.12.06 |
| Unity2D_Week1 : Raycast (0) | 2021.12.06 |
| Unity2D_Week1 : ChargeJump (0) | 2021.12.06 |
| Unity2D_Week1 : Move (0) | 2021.12.06 |