GaGe

[Unity] collision 오브젝트 충돌 감지 방법 본문

Unity

[Unity] collision 오브젝트 충돌 감지 방법

Sorrel 2021. 10. 20. 17:51

1. Collision이란 무엇인가?

 

Collision은 말 그대로 '충돌'이라는 기능을 갖고 있습니다.
오브젝트와 오브젝트가 서로 면이 맞닿음을 감지합니다. 물체끼리 부딪혔을 때 어떤 물체와 부딪혔는지도 파악할 수 있습니다.

 

Rigidbody

Rigidbody는 오브젝트를 속이 찬, 그러니까 mesh한 body로 만들어준다.
rigidbody가 없으면 오브젝트끼리 통과하지만 있으면 통과하지 못한다.

 

 2. 유니티에서 간단한 실습해보기

 

유니티에서 평면 위에 공을 떨어트려서 충돌 감지를 하는 실습을 해볼 것이다.

우클릭 ▶ 3D Object ▶ Plane 을 선택하여 평면을 추가해준다.

 

이런 평면이 새로 생성되는데 너무 칙칙해서 하얀 매테리얼로 바꿔주겠다. (필수X)

 

메테리얼을 바꾸는 방법은 inspector 창 ▶ Mesh Renderer ▶ Materials ▶ Element 0 ▶ 맨 오른쪽 원 두개 버튼을 눌러서 하얀 매테리얼로 변경해줬다.

 

 

매테리얼 변경 완료

 

 

 

구 오브젝트를 생성한다.

hierarchy 창에서 우클릭 ▶ 3D Object ▶ Sphere

 

 

구를 평면 위로 이동을 해줍시다. 구 위에 있는 화살표를 당겨줍니다.

 

 

shpere 오브젝트를 누르고 inspector 창 ▶ add component ▶ rigidbody를 추가해줍니다.

 

 

공이 떨어져서 평면을 감지하니까 공이 감지한 물체가 뭔지 알려면

평면에게 tag를 달아줘야 합니다.

평면 오브젝트에게 이름을 붙여주는 것이죠.

 

그럼 태그를 추가해서 달아봅시다.

 

위 사진처럼 태그부분을 클릭하여 add tag... 를 선택해줍니다.

 

Tags에 가장 오른쪽에 있는 + 버튼을 누릅니다.

 

 

태그 이름을 plane으로 생성해줍니다. (자유롭게)

save 를 눌러줍니다.

 

 

다시 아까 창으로 돌아와 tag 부분을 보면 맨 아래 plane 부분이 생겼습니다.

해당 태그로 설정해줍니다.

 

 

이제 소스코드를 코딩해봅시다.

project 파일에서 우클릭 ▶ create ▶ c# script 로 새로운 스크립트를 생성해줍니다. (이름은 마음대로)

 

 

 

collision 탐지는 정해진 함수를 사용해야된다. 

collision을 감지하는 함수는 많지만 가장 많이 사용되는 OnCollisionEnter 함수를 사용해보겠다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class collision : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    private void OnCollisionEnter(Collision collision)
    {
        if (collision.collider.gameObject.CompareTag("plane"))
        {
            Debug.Log("This is plane");
        }
    }
}

 

일단 collision을 감지하면 해당 함수가 발동되고

Tag가 "plane"인 오브젝트와 collision 하면 작동되는 조건문이다.

 

임시로 log를 출력하게 했다.

 

 

collision 함수의 종류

 

 

 

 

 

plane을 감지하는 오브젝트는 구 오브젝트이므로 shpere 오브젝트의 inspector 창에 위에서 작성했던 스크립트를 추가한다. (드래그)

 

 

 

위에 재생버튼으로 실행해보면 구가 떨어져서 평면에 안착하고,

console 창에서는 "This is plane" 로그가 기록된 것을 보니, 구 오브젝트가 plane 오브젝트를 감지한 것을 알 수 있다.

Comments