Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

코딩볶음

02. 유니티 오브젝트 충돌 처리 [Collision, Trigger] 본문

유니티

02. 유니티 오브젝트 충돌 처리 [Collision, Trigger]

쿡스 2022. 1. 9. 03:05

Collision

- 실제 충돌을 일으켜 겹치지 않고 밀려날때 발생

 

Trigger

- 충돌 이벤트만 발생하고 겹치도록 할때 발생


Collision

- 두 오브젝트 모두 Trigger 상태가 아닐때!

 

1. Plane, Cube, Sphere를 설치합니다.

 

2. Cube와 Sphere에 Rigidbody 컴포넌트를 추가합니다.

(Rigidbody : 게임 오브젝트가 물리적인 연산이 가능해집니다. 중력, 속도, 무게 등)

 

Rigidbody를 추가하고 나면 중력의 영향을 받게 되고 물리 작용을 받게 됩니다.

 

3. 아래 스크립트를 작성합니다.

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

public class CollisionSample : MonoBehaviour
{
	// 오브젝트와 부딪혔을때 최초 1회
    private void OnCollisionEnter(Collision collision)
    {
        Debug.Log($"{collision.gameObject.name}와 부딪혔다.");
    }

	// 부딪힌 오브젝트와 떨어지기 전까지 계속 발생
    private void OnCollisionStay(Collision collision)
    {
        Debug.Log($"{collision.gameObject.name}와 부딪히는 중.");
    }

	// 부딪힌 오브젝트와 떨어졌을때 1회
    private void OnCollisionExit(Collision collision)
    {
        Debug.Log($"{collision.gameObject.name}와 떨어졌다.");
    }
}

 

4. Sphere 오브젝트에 스크립트를 추가합니다.

 

5. 실행시킨 후 Sphere를 Scene 뷰에서 이리저리 움직여봅니다.


Trigger

- 두 오브젝트에 하나라도 Trigger 상태일때!

 

1.  Collider 컴포넌트의 Is Trigger를 True로 체크합니다.

 

2. 스크립트를 작성하고 Sphere에 붙여줍니다.

(CollisionSample 스크립트가 있다면 제거해줍니다.)

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

public class TriggerSample : MonoBehaviour
{
    private void OnTriggerEnter(Collider other)
    {
        Debug.Log($"{other.name}과 충돌 시작!");
    }

    private void OnTriggerStay(Collider other)
    {
        Debug.Log($"{other.name}과 충돌 중!");
    }

    private void OnTriggerExit(Collider other)
    {
        Debug.Log($"{other.name}과 충돌 끝!");
    }
}

 

3. 테스트해보면 Sphere는 충돌이벤트가 발생하지만 오브젝트는 통과합니다.

(Plane에도 콜라이더가 붙어있어서 로그가 뜨게 됩니다.)