Unreal Engine/게임클래스 - 언리얼엔진 기초

[10강] Collision (Overlap / Hit)

whereareyoung 2023. 7. 24. 17:40

기본 세팅 설정 

   프로젝트세팅 > 프로젝트 맵&모드 > StartupMap > "Collision"

당분간 충돌체크 맵 관련해서 작업을 할 것이기 때문에 작업에 용이하게 변경

 

이벤트 작성 

3번째 작성해 두었던 블루프린트를 활용해 Collision의 두가지 종류를 정의할 수 있는 이벤트를 작성

 

1. Overlap (겹침)

   1) "Generate Overlap Events" 가 체크되어 있는지 검토

기본적으로 Collision은 이 탭에서 관리를 하는데,

"Generate Overlap Events" 가 켜져 있어야 Overlap 이벤트를 작동시킬 수 있음 

 

   2) "On Component Begin Overlap" 이벤트 함수 생성

On Component Begin Overlap : 겹침 시작

On Component End overlap : 겹침 종료

 

생성된 함수가 정상작동하는지 Print String을 통해 확인하기 위해 

Overlap 되었을 경우 "Overlap" 을 출력하도록 함 

 

   3) Overlap Test

Overlap의 조건 : 충돌하려는 두 물체는 모두 Generate Overlap이 모두 켜져 있어야 실행 됨 

부딫힐 물체에 Overlap Events 체크가 되어있는지 확인 

 

게임모드를 플레이 하면 다음과 같이 "Overlap" 로그가 뜨는 것을 확인 할 수 있다. 

 

   2. Hit (Block)

다음과 같이 "On Compenent Hit" 이벤트 함수가 발생했을때 "Hit" 로고 가 뜰 수 있도록 블루프린트를 설정한다. 

* On component Hit : 충돌하려는 두 물체 중 하나만 Simulation Generate Hits Event가 켜져 있으면 발생함 

Hit 이벤트가 일어날 수 있게 끔 

 

컴파일 후 확인해 보면 다음과 같이 지속적으로 "Hit" 이 일어나는 것을 확인할 수 있다. 

* 위의 경우에서 오버랩도 체크되어 있지만 활성화 되지 않는 이유는 "Hit" 가 발생되면서 두가지 오브젝트가 "Overlap" 되지 않기 때문입니다. 

 

Collision preset : 해당 물체가 어떻게 반응할지를 결정함 

세팅 > 프로젝트 세팅 > 콜리전 > Preset(프로파일) 에서 정의 되어 있는 정보를 확인 할 수 있다. 

"편집..." 버튼을 통해서 정보를 확인하면 다음과 같다 

 

1) 콜리전 켜짐

   Query Only : 겹침만 허용하겠다. 

   Physics Only : 블럭만 허용하겠다. 

   Collision Enabled : 겹침도 허용하고 블럭도 허용하겠다.

 

2) 오브젝트 유형 : 충돌을 검출(체크) 하려는 오브젝트의 유형

   *여기서 콜리전 여부 검토 및 편집가능

오브젝트가 충돌을 주는 오브젝트에 대한 속성 

   WorldStatic : 고정된 물체일 때

   WorldDynamic : 이동하는 물체일 때 

   Pawn : 플레이어 일때

      * "Collision" < "Collision Preset" 을 확인해 보면 Pawn 으로 되어있음 

   Physics Body : 물리가 켜져있는 상태 

      * 방금 제작했던 콜라이더 블루프린터 확인해보면 콜리전 프리셋 < "PhysicsActor (이름)" < "PhysicsBody (오브젝트 타입)" 로 되어있음 

      * "PhysicsActor" : 물리 엑터들을 제어할 수 있도록 해놓은 것들 

   Vechicle : 차랑 자동차 이런거를 정의할 때 사용 

   Distructable : 파괴가능한 물체일 때 

 

콜리전 프리셋 > "Custom..." 선택할 수 도 있음 

   *보통은 위와 같이 "Query and Physics" 를 체크한다. 

 

"무시" 체크 후, Pawn(플레이어), PhysicsBody(떨어지는 물리) 두가지 체크 

 

위의 경우,

1) 큐브가 떨어지며 부딫혔을경우 Hit

2) Pawn(플레이어)와 Overlap이 활성화 된다. 

<Collision 정리>

파란부분 : 주는 것 - 자기가 가서 충돌할때 어떤 역할을 할 것인지에 대한 결정 

빨간부분 : 받는 것 - 어떤 애에대해서 Hit 할건지 Overlap할건지에 대한 결정 

 

다음 토글을 이용해 Collision 여부를 활성 / 비활성 할 수 있다. 

 

Collision 이벤트 함수 요소에 대한 이해 

   1. Hit component : 충돌이 된 오브젝트(당한)를 출력 (ex. BP_03_Collision의 Box Collision)

   2. Other Actor : 충돌시킨 오브젝트(주체)를 출력 (ex. Cube의 StaticMeshComponent )

... 나머지 구성요소에 대한 설명은 지금은 생략하지만 

* Sweep Result : 스윕되었을 때 결과가 나오는 아이 (겹침되었을때), Hit : 충돌 되었을 때 어떠한 정보를 읽어 내주는 아이 

 

Actor를 활용한 라이트 구현 

* Actor : "Overlap" 를 간단히 사용할 때 사용, 예를들어 어느 구역에 들어갔을 때 불이 켜진다 

   1. "BP_04_Trigger_Light" 블루프린트 액터 생성

   2. 컴포넌트 추가 > Box collision > Scale (1.5, 1.5, 3.0)

   3. 컴포넌트 추가 > Point Light (비춰지는 범위)

   4. 제작한 블루프린트 라이트를 다음과 같이 배치 

5. 컴포넌트 추가 > 텍스트렌더러 > 다음과 같이 설정 

6. 다음과 같이 배치

7. 라이트를 다음과 같이 설정 

 

이벤트 그래프 설정 

   * 기본적으로 라이트를 끄고 플레이어가 근처로 이동하면 켜지게 끔 구현 

   1) Begin Play 이벤트 함수 생성 

   2) Point Light 가져오기 

   3) Set Visibility 함수 가져오기 (Rendering > Visible에 영향을 미침)

   4) 이벤트 함수를 통해 "point light" 을 껐다 켰다 할 것이기 때문에 Visible 토글을 비활성화 해 준다 

   5) "Actor Begin Overlap", "Actor End Overlap"  이벤트 함수를 생성하고 다음과 같이 설정해줌

   (Visibility 토글 비활성화 활성화 부분 확인)

* 충돌하려는애, 충돌받으려는 애 둘다 Collision이 있어야 함, "Generate Overlap"이 켜져 있어야 함 

* Actor Begin Overlap : 컴포넌트 겹침보다 가볍게 쓰고 싶을 때 사용, Overlap의 조건과 마찬가지로 양쪽의 Generate Overlap이 모두 켜져 있어야 실행됨 

 

   6) 더 가시적인 확인을 위해 Box > Hidden in Game 토글 비활성화 

   7) 컴파일 후 실행하여 보면 충돌 Overlap 하였을 경우 빛이 켜졌다 꺼졌다 하는 것을 확인 할 수 있음 

 

오브젝트 타입에 관해서는 다음시간에 이어서 계속 다루기로 하셨다. 

요소 하나하나 나누어서 다루어 주셔서 활용법에 대해 연상해보거나 전체적인 구조를 파악하는 것에 도움이 많이 되었던 것 같다.