코딩볶음
02. 유니티 오브젝트 충돌 처리 [Collision, Trigger] 본문
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에도 콜라이더가 붙어있어서 로그가 뜨게 됩니다.)
'유니티' 카테고리의 다른 글
[Error] Unity CocoaPods could not find compatible versions for pod "GoogleAppMeasurement" (0) | 2022.01.19 |
---|---|
[Error] Unity No GoogleService-info.plist files found in your project (0) | 2022.01.18 |
[Error] Unity WARNING: The option setting 'android.enableR8=false' is deprecated (2) | 2022.01.14 |
[Error] Unity unexpected element <queries> found in <manifest> (0) | 2022.01.14 |
01. 유니티 설치 (0) | 2022.01.02 |