Unity 개발일지

[Unity] 충돌에 대해 알아보자 본문

Unity 개발

[Unity] 충돌에 대해 알아보자

아머르 2024. 5. 24. 15:38

[충돌에 필요한 것]

 

 

[COLLIDER]

 

1. Edit Collider: 오브젝트의 충돌 범위를 조절할 수 있다.

 

2. Material: Physics Material 적용 옵션 (Physics Material 2D)

충돌 재질에 따라 마찰(Friction), 탄성(Bounciness)을 적용할 수 있는 Material을 적용할 수 있다.

 

3. Is Trigger

활성화시키면 충돌은 감지하지만 물리계산은하지 않음(트리거)

 

4. Used By Effector

한쪽방향은 통과, 한쪽방향은 충돌하도록 설정할 수 있다.

(Playform Effector 2D 컴포넌트로 발판 만들기)

 

5. Used By Composite

부모자식 관계의 Collider 컴포넌트가 있는 오브젝트가 겹쳐있을 때 겹쳐있는 부분의 Collider를 하나로 이어준다.

Composite Collider 2D 추가 필수, BoxCollider만 사용 가능

 

6. AutoTiling

활성화 시 타일링 했을 때 Collider가 자동으로 설정


7. Offset: 콜라이더의 위치 조절

 

8. Size: 콜라이더의 사이즈 조절

 

9. Edge Radius

모서리부분의 Collider를 설정한 값으로 깎아 둥글게 만듦 (Collider범위도 커진다.)

 

10. Direction(Capsule Collider) Collider의 방향조절

 

 

 

[RigidBody]

- Body Type : Dynamic

다른 모든 타입과 충돌하고 중력과 힘의 영향을 받는다.

1. Material: Physics Material 적용 옵션

2. Simulated: 물리 계산 실행 옵션 (해제 시 물리연산X)

3. Use Auto Mass: 질량 자동 계산 옵션

4. Mass: 질량 수치 옵션

5. Linear Drag: 선형 움직임 저항 옵션 (바닥마찰, 이속디버프)

6. Angular Drag: 회전 움직임 저항 옵션 (공기저항, 윤활유)

7. Gravity Scale: 중력 값 옵션

 

8. Collision Detection: 충돌 감지 옵션

 Continuous로 설정 시 영구적으로 충돌 차단(벽돌버그)

9. Sleep Mode: 오브젝트 휴면 상태 프로세서 옵션

 Never Sleep - 오브젝트가 비활성화되어도 물리현상을 멈추지 않음 (유니티에서 사용하지 않는 것을 권장)

 Start Awake - 오브젝트가 활성화 되면 켜짐

 Start Asleep - 물리충돌이 일어날 시 켜짐(그 전까진 휴면상태)

 

10. InterPolate: 물리 업데이트 보간 옵션(프레임과 프레임 사이 추정값)

 None - 보정없음

 Interpolate - 이전 프레임을 기반으로 보정하여 움직임을 부드럽게 보정

                      게임의 프레임 속도가 물리 업데이트 속도보다 훨씬 높을 때 물리 개체의 움직임을 부드럽게 만드는 데 유용                        예를 들어 레이싱 게임에서 보간을 사용하여 게임이 높은 프레임 속도로 실행되는 경우에도 자동차의 움직임

                      이 더 부드럽게 보이도록 할 수 있습니다.

 Extrapolate - 다음 프레임의 움직임을 추정해서 움직임을 부드럽게 보정

                      보간에 의해 도입될 수 있는 인지 지연을 줄이려는 경우, 특히 개체가 플레이어 입력에 의해 직접 제어되는

                      경우에 유용. 예를 들어 플레이어가 캐릭터의 움직임을 직접 제어하는 ​​빠르게 진행되는 액션 게임에서는

                      Extrapolate를 사용하여 캐릭터의 움직임이 물리 시스템에 의해 구동되는 경우에도 더 빠르게 반응하도록

                      할 수 있습니다.

 

11. Constraints - Position, Rotation 고정 옵션

 

 

- Body Type : Dynamic

Dynamic 타입의 콜라이더만 충돌하고 나머지 타입은 충돌X

(물리연산X -> 코드로 제어하기 알맞음)

 

Use Full Kinematic Contacts: 모든 타입과 충돌

하지만 충돌 후 물리엔진 적용되지 않음(충돌감지)

 

 

 

 

 

 

 

 

- Body Trpe : Static

Dynamic타입의 Rigidbody와 충돌한다

움직이는 물체를 Static으로 설정하면 움직이지 않음

 

 

 

 

 

 

 

[OnCollision2D, OnTrigger2D]

충돌에 대한 개념은 이해했는데 언제 뭘 써야될까?

 

체크하는 쪽이 콜라이더, 충돌하는 쪽은 콜라이더 -> OnCollision2D

 

체크하는 쪽이 콜라이더, 충돌하는 쪽은 트리거 -> OnTrigger2D

 

체크하는 쪽이 트리거, 충돌하는 쪽은 콜라이더 -> OnTrigger2D

 

체크하는 쪽이 트리거, 충돌하는 쪽은 트리거 -> OnTrigger2D

 

간단히 말하면 한쪽이라도 isTrigger를 적용한다면 OnTrigger2D를 사용하면 된다.

 

 

 

[같은팀과는 충돌을 하고싶지 않아요!]

보통 게임을 보면 적과는 충돌을 하지만 아군끼리는 충돌을 하지 않는 경우가 많다.

이 경우에는 아군은 동일한 Layer에 설정을 해두고 Edit - Project Settings - Physics2D - Layer Collision Matrix 에서 Default끼리의 충돌을 체크 해제 해주면 충돌하지 않는다.

반응형