Ad Block 한번만 꺼주시면 안될까요..?
게임 개발/유니티C#

유니티) 닿았을때, 닿아있을때, 떨어졌을때 실행하기. (OnCollision)

UniCoti(유니코티) 2023. 2. 17.

오늘은 Oncollision 계열 함수들에 대하여 알아보겠다.

초보자들이 레이를 이용해 바닥감지를 많이 하는데,

어려워하는 걸 보며 이걸 쓰면 좋을 텐데라는

생각을 많이 하여 글을 쓴다.

시작.


먼저, 이 계열은 종류가 많다.

그렇기 때문에 먼저 나열하고, 설명을 시작하겠다.

Oncollision... 2D 3D
Enter (닿았을때 한번 실행) OnCollisionEnter2D OnCollisionEnter
Stay (닿아있는 중일때 계속 실행) OnCollisionStay2D OnCollisionStay
Exit (떼어질때 한번 실행) OnCollisionExit2D OnCollisionExit

이 정도로 정리할 수 있겠다.

설명을 보면 알겠지만, 이걸 모두 설명할 필요는 없고,

Enter 계열, Stay 계열, Exit 계열이 모두 다르기에

3개로 나눠서 설명하겠다.


1. OnCollisionEnter2D, OnCollisionEnter (Enter)

Enter 쪽 함수들은 닿았을 때 한번 실행된다.

예를 들면 점프하고 바닥에 내려왔다면,

바닥에 닿는 순간 한번 실행된다.

 

리그오브레전드 문도박사의 Q

이걸 이용해서 뭔가 투사체를 던졌을 때 맞는 순간

상대에게 대미지를 주거나 할 수 있다.

 

이걸 활용해서 지금 바닥인지 공중인지 구분하여

애니메이션을 줄 수도 있다.

private void OnCollisionEnter2D(Collision2D other) { //2d
   Destory(other.gameobject); //닿는 물체를 없앰. 
}

private void OnCollisionEnter(Collision other) { //3d
        
}

other이 닿은 물체 라는걸 알 수 있다.

 


2. OnCollisionStay2D, OnCollisionStay (Stay)

Stay 쪽 함수들은, 닿고 있는 중에 Update()처럼 계속 실행된다.

이걸 어디에 활용할 수 있을까?

실제로 이와 비슷한 기능을 이용해 제작한 지는 모르겠지만

파피플레이타임의 전기 연결 또한 손이 계속 저기에 닿고 있어야만

전기(로직)가 흐른다. 이런 기능을 만들 때 활용할 수 있겠다.

private void OnCollisionStay2D(Collision2D other) { //2d
        
}

private void OnCollisionStay(Collision other) { //3d
        
}

3. OnCollisionExit2D, OnCollisionExit (Stay)

이번엔 Exit계열이다. Exit계열은, 물체에서 떨어질 때 한번 실행된다.

이번 꺼는 게임 속에서 직접적인 시각적 예시를 찾기 어려운데,

 

게임 개발 중을 예시로 들면 점프를 했을 때, 바닥이랑 떨어지기 때문에

그때 Exit가 발동되어 점프 중으로 인식해줄 수 있다.

private void OnCollisionExit2D(Collision2D other) { //2d
        
}

private void OnCollisionExit(Collision other) { //3d
        
}

 

게임을 예시로 들어 OnCollision을 설명해 보았는데,

사실 점프를 위한 거였다가 살짝 틀어졌다.


어쨌든 도움이 되었길 바라며,

 

끝.

댓글

💲 추천 글