캐릭터 점프는 애니메이션이 있어야만 되는건가 라는 바보같은 생각을 잠깐 했는데,,바보같은 생각이었다❗️❗️
점프는 캐릭터에 위쪽 방향으로 힘을 더해주면 된다🙃
점프를 구현할 때 사용하는 변수는
//점프 버튼을 입력 받았는지 알기 위한 변수
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;
}
반응형
'Programming > Unity' 카테고리의 다른 글
[유니티] SerializeField (2) | 2021.05.03 |
---|---|
[유니티] 오큘러스_jdk not found (0) | 2021.03.30 |
[유니티] 캐릭터 애니메이션 루프 (0) | 2021.02.10 |
[유니티] 카메라 위치 이동 (0) | 2021.02.03 |
[유니티] 관성에 의한 쓰러짐 (4) | 2021.02.01 |