물리, 충돌

감사콩·2025년 10월 16일

유니티

목록 보기
4/29

서론

유니티에서 물리현상과 충돌을 부여하는 방법을 배우고
실습을 통해 복습하겠다.

Rigidbody

물리적 특성(질량 중력 속도 힘)을 적용
인스펙터 내 항목이 각각 어떤 용도로 쓰이는 지 알아둬야겠다.

Collider

오브젝트의 충돌 영역(범위) 정의

Is Trigger

체크 시 물리 충돌은 없이 트리거 이벤트만 발생
Rigidbody와 함께 사용 가능

충돌 이벤트

일반 충돌

Collider + Rigidbody가 서로 맞닿으면 발생

void OnCollisionEnter(Collider other)
{
    Debug.Log("충돌 시작")
} 
OnCollisionStay 충돌 지속 중
OnCollisionExit 충돌 끝

Collider 객체를 통해 충돌상대, 접점(point), 힘(force) 확인 가능

트리거 충돌

Is Trigger 체크 시 발생
OnTriggerEnter, Stay, Exit
예시) 소닉 등 코인 획득
마리오 버섯 획득
Rigidbody를 지닌 객체와만 상호작용

콜백 함수

다른 함수나 메서드에 인자로 전달되어, 특정 시점에 호출되는 함수

충돌 간 주의점

원하는 충돌 결과가 일어나지 않을 때 체크리스트로 활용하자.

실습

오늘 배운 내용을 통해
충돌 처리를 통해 총알(Bullet)과 적(Enemy)을 제거하는 기능을 만들어 보겠다.

목표

  • Unity의 Collider와 충돌 이벤트 함수(OnCollision, OnTrigger)를 활용
  • 발사된 총알이 적이나 판정 오브젝트와 충돌했을 때 제거되는 기능 구현
  • 소환된 적이 플레이어와 충돌하거나 판정선에 충돌했을 때 제거되는 기능 구현

일단 Bullet.cs에 OnTriggerEnter 설정

  1. 디버그용 로그 출력
  2. 적에게 닿으면 hit메서드(적군 제거) 및 총알 제거
  3. 네트에 닿으면 총알 제거
  4. 플레이어에게 닿아도 파괴됐으면 좋겠음(추후에 여기에 플레이어 HP감소 추가할 예정)

일단 총알 제거부터 해보겠다 결과는?

총알 먹방 시작

원인 찾기

  1. 적 제거 스크립트 확인

이상 없음


  1. 태그 및 스크립트 연결 문제있나 확인

마찬가지로 이상 무

해결

위 2개로 안돼서 다시 불릿으로 이동

  1. Bullet.cs 스크립트 확인

컴퍼넌트 가져올 주체를 부모로 변경하고 테스트 시작

제대로 제거된다.

부모(Empty) 자체에 피격 시 제거 스크립트를 넣어놔서 그런 듯.

충돌간 주체를 확실히 파악하자.

BulletNet

적 충돌 시 제거는 완성했으니
네트 충돌 시 삭제도 확인하겠다

동일하게 OnTriggerEnter 사용

문제 없이 제거 완료

Enemy, 플레이어 간 충돌

에너미를 플레이어 방향으로 전진하게 만들고
Player, net 충돌 시 제거
(나중에 Player 충돌 시, Player 체력 깎는 로직 추가)

Enemy에 리짓바디 추가, IsTrigger 체크하여 충돌 시 제거까지 구현

종합

Enemy - Player, Bullet, Net 충돌 시 제거
Bullet - Enemy, Net 충돌 시 제거

총 결과물

마무리

OnCollision 도 사용해보는 게 좋을 거 같다.
현재 무브 구현도 좌표이동 말고 다른 방식도 고민해보자.

profile
안녕하시와요

0개의 댓글