이전편
2024.03.28 - [Unity/2D] - [Unity/2D] 마우스 왼쪽 버튼이 눌러졌을 때 캐릭터 방향 전환하기 - Mouse Input
중력 컴포넌트 추가 - Rigidbody


플레이 버튼을 누르면 빗방울이 떨어지고 있지 않는데요.
중력이 없어서 그렇습니다.
Rigidbody 컴포넌트를 추가해주면 중력이 적용됩니다.
여기서 Rigidbody는 3D에서, Rigidbody 2D는 2D에서 선택해주시면 됩니다.

충돌 컴포넌트 추가 - Collider
중력은 적용했지만 바닥을 뚫고 한 없이 밑으로 떨어질 것입니다.
그러면 바닥과 충돌하는지 알 수 있어야겠죠?
그래서 빗방울 오브젝트에 Circle Collider 컴포넌트를 추가합니다.

바닥 오브젝트에는 Box Collider 컴포넌트를 추가합니다.
플레이 해보면 아래와 같이 빗방울이 바닥을 뚫지 않고 닿게 됩니다.

충돌 체크
그럼 이제 빗방울이 바닥에 닿았을 때 멈추지 않고 파괴되도록 해보겠습니다.
그전에 빗방울과 바닥간의 충돌 체크부터 해보겠습니다.
우선 Rain 스크립트를 생성합니다.
public class Rain : MonoBehaviour
{
// 충돌이 일어났을 때 호출되는 이벤트 함수
private void OnCollisionEnter2D(Collision2D collision)
{
Debug.Log("충돌");
}
}
위와 같이 OnCollisionEnter2D(Collision2D collision) 이벤트 함수를 작성합니다.
이 함수는 충돌이 일어났을 때 호출되는 이벤트 함수입니다.
이 스크립트를 Rain 오브젝트에 추가하겠습니다.

그럼 이제 Rain과 Ground가 충돌하면 콘솔창에 "충돌" 문자열이 나타나겠죠?

충돌 체크가 잘 이루어졌네요.
빗방울 파괴하기
// 충돌이 일어났을 때 호출되는 이벤트 함수
private void OnCollisionEnter2D(Collision2D collision)
{
// 충돌된 게임 오브젝트의 태그가 "Ground"일 때
if(collision.gameObject.CompareTag("Ground"))
{
// 충돌된 게임 오브젝트 파괴(빗방울 파괴)
Destroy(this.gameObject); // this == 현재 이 스크립트가 부착된 게임 오브젝트
}
}
collision 변수에는 빗방울이 충돌한 오브젝트의 정보가 담겨있습니다.
그렇다면 collision.gameObject는 충돌한 오브젝트를 의미하겠죠?
collision.gameObject.CompareTag("Ground"); 는
충돌된 게임 오브젝트의 태그가 "Ground"일 때를 의미합니다.
빗방울과 바닥이 충돌했다는 것입니다.

이제 충돌한 빗방울이 파괴되어야 하는데요, Destroy(collision.gameObject);를 하면 collision이 바닥이니까 바닥이 파괴되겠죠?
그러니까 빗방울이 파괴되기 위해서는 this.gameObject를 해주어야 합니다.
this는 현재 이 스크립트가 부착된 게임 오브젝트입니다.
즉, 자기 자신을 의미하죠.
이제 실행해보면!
다음편
2024.03.28 - [Unity/2D] - [Unity/2D] 빗방울 랜덤 생성하기 - Random.Range, renderer.color
모바일 화면 크기 설정이 궁금하다면?
'스파르타 게임개발종합반(Unity) > 사전캠프 공부 기록' 카테고리의 다른 글
[Unity] 빗방울 프리팹 반복 생성 - Instantiate(), InvokeRepeating() (0) | 2024.03.28 |
---|---|
[Unity/2D] 빗방울 랜덤 생성하기 - Random.Range, renderer.color (0) | 2024.03.28 |
[Unity/2D] 마우스 왼쪽 버튼이 눌러졌을 때 캐릭터 방향 전환하기 - Mouse Input (0) | 2024.03.28 |
[Unity/2D] 캐릭터 방향 전환하기 - 플립(Flip) (0) | 2024.03.28 |
[Unity/2D] 캐릭터 이동하기, 초당 프레임 설정 - Application.targetFrameRate (0) | 2024.03.28 |
댓글