본문 바로가기

Unity/Unity2D

Unity2D_Week1 : Jump

점프를 구현하기 위해서는 제어할 객체에 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