캐릭터 점프구현
이번에도 역시나 Roll a Ball을 활용한다.
캐릭터 점프는 실제 위치값을 움직이는 Translate보다는
물리적 힘을 위로 주어서 튀어 오르는듯한 느낌을 주는 AddForce를 이용하는게 좋아보인다.
먼저 소스코드를 살펴보자
void Start( )
{
rb = GetComponent<Rigidbody>();
jumpCount = 1; //점프 가능횟수
isGround = true; //땅에 있을때
}
jumpCount는 1로 초기화 해준다.
isGround는 true로 땅에 있을때 캐릭터가 점프를 할 수 있는 환경이라고 판단하기 위해 선언 한 것이다.
void FixedUpdate ()
{
if (isGround)
{
jumpCount = 1;
if (Input.GetKeyDown("space")) //점프
{
if (jumpCount==1){
rb.AddForce(0, 300f, 0); //점프
isGround = false;
jumpCount = 0;
}
}
}
}
update문에서는 우선 플에이어가 있는 위치가 땅바닥인지 체크를 해준다.
땅바닥이라면 jumpCount값을 1로 만들어준다.
그리고 스페이스바가 눌리면 다시 jumpCount가 1인지 체크를 한다.
두 if문이 모두 맞다면 플레이어의 rigidbody에 y값에 힘을 주어 캐릭터가 위로 튀어 오르게 만들어준다.
점프를 하고 있는 중에는
플레이어의 위치가 땅바닥이 아니기 때문에 isGround는 false로 설정하고
점프를 한번 했기 때문에 다시 jumCount는 0으로 만들어준다.(다시 점프를 할수 없게)
private void OnCollisionEnter(Collision col)
{
if (col.gameObject.tag == "ground")
{
isGround = true; //Ground에 닿으면 isGround는 true
jumpCount = 1; //Ground에 닿으면 점프횟수가 1로 초기화됨
}
}
OnCollision물체가 플레이어에게 닿으면 아래 코드들이 활성화된다.
플레이어에게 Collision(여기서는 땅바닥)이 닿게 되면
jumCount를 1로 만들어준다.
여기서 알아야 할 것은
JumCount와 플레이의 위치 isGround를 체크 하지 않고 스페이스바를 여러번 누르게 되면
계속해서 하늘로 치솟아 무한 점프가 될것이다
그것을 방지하기 위해 체크한다. (캐릭터가 땅에 도착해야 다시 점프를 할 수 있게)
그리고 OnTrigger이 아닌 OnCllision을 사용했다는 점도 파악해야한다.
'유니티 > 기능구현' 카테고리의 다른 글
유니티) 일정거리 안에 들어오면 오브젝트 반응하기 (오브젝트 사이간 거리계산) (2) | 2018.12.24 |
---|---|
유니티) 랜덤함수 Random.Range 아이템 랜덤 드랍하기! (0) | 2018.12.16 |
유니티)카메라 화면 전환 효과내기(1인칭),(측면뷰) (2) | 2018.12.15 |
유니티) 3D 캐릭터 마우스로 회전시키기 (0) | 2018.12.06 |
유니티)3D 캐릭터 움직이기 (0) | 2018.12.05 |