Programming/Unity

[유니티] 캐릭터 점프

lingk 2021. 2. 16. 21:03

캐릭터 점프는 애니메이션이 있어야만 되는건가 라는 바보같은 생각을 잠깐 했는데,,바보같은 생각이었다❗️❗️

점프는 캐릭터에 위쪽 방향으로 힘을 더해주면 된다🙃

 

점프를 구현할 때 사용하는 변수는

//점프 버튼을 입력 받았는지 알기 위한 변수
bool jDown;
//현재 점프 중인지 알기 위한 변수
bool isJump;
//움직이는 벡터?
Vector3 moveVec;
//플레이어의 Rigidbody를 받아오기 위한 변수
Rigidbody rigid;

 

isJump와 rigid는 Awake()함수 안에서 초기화 해준다.

void Awake()
{
    isJump = false;
    anim = GetComponent<Animator>();
    rigid = GetComponent<Rigidbody>();
}

 

jDown 변수는 GetInput()함수에서 키보드 값을 대입해준다.

void GetInput()
{
    hAxis = Input.GetAxisRaw("Horizontal");
    vAxis = Input.GetAxisRaw("Vertical");
    wDown = Input.GetButton("Walk");
    jDown = Input.GetButtonDown("Jump");
}

 

점프를 하는 함수는 Jump()함수이다. 점프 키를 입력받았고, 움직이고 있지 않을때 점프 동작이 일어난다. 이 동작은 점프하고 있지 않을때 작동한다. 조건을 만족하면 rigid는 위쪽으로 힘을 받는다. 점프를 하고있기 때문에 isJump에 true를 대입한다.

void Jump()
{
    if(jDown && moveVec == Vector3.zero && !isJump){
        rigid.AddForce(Vector3.up * 13, ForceMode.Impulse);
        isJump = true;
    }
}

 

캐릭터가 착지했는지는 OnCollisionEnter()함수에서 구현해주었다. 캐릭터가 닿은 게임오브젝트의 태그가 Ground일 때, isJump에 false를 대입하여 점프를 마쳤다는 것을 표시한다. Ground 태그를 사용하기 때문에 바다가 오브젝트의 태그를 Ground로 정해준다.

void OnCollisionEnter(Collision collision)
{
	if(collision.gameObject.tag == "Ground")
		isJump = false;
}

 

반응형