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

[14강] Multi Sphere Trace

whereareyoung 2023. 8. 17. 16:30

이번 시간에는 특정 공간안에 있는 물체들을 찾아내고 힘을 줘서 효과(폭발) 을 연출

 

1. BP_06_Explosion 블루프린트 설정

 

   1) Custom Event 생성, rename "Explosion"

 

   2) Spawn Emitter at Location 함수 생성 및 설정 

      - Emitter Template : 어셋선택에서 아까 가져왔던 폭발 효과 "Fire_Exp_03을 선택"

      - Location : BP_06_Explosion 위치여야 하니 "Get Actor Location" 함수 생성 및 연결 

      - Auto Destory : 자동 제거 할거냐는 의미, 활성화 

 

* Spawn Emitter at Location : 파티클, 폭발 등의 입자 효과를 플레이 해주는 함수, 해당 위치에서 파티클 시스템을 등장시키고 플레이 할 경우에 사용 

 

   3) BP_06_Explosion 태그 달기 

다음과 같이 BP_06_Explosion > Tag > "Explosion 추가

* 그룹을 구분해주기 위해서 태그 기능을 사용할 수 있으며, 태그는 여러 개 달 수 있음.

* 주의! Actor 에서 펼쳐서 넣는 부분에 Tag 해야 찾을 수 있음 (하위에 하면 Tag를 찾지 못함)

 

2. BP_06_Trigger_Explosion 블루프린트 설정 

Get All Actors with Tag 함수를 사용해 태그를 이용해 Explosion 객체를 찾아서 저장하여야 함

 

1) BeginPlay 이벤트 함수 설정

   - Get all actors with class 의 경우 지정한 클래스 타입으로 자동변환되지만, with Tag의 경우 엑터형으로 나오기 때문에 필요한 자료형으로 변환해 주어야 함

   - Tag가 있는 Actor가 하나지만, 여러 개 중에 특정 하나를 찾고 싶을 때 사용하는 방법도 존재하며 후에 진행할 예정

 

2) Get All Actors with Tag 함수에 태그 입력해 주고, get 0번 (어자피 1개 나오기 때문에) 으로 넣어준다.

3) BP_06_Explosion 자료형을 가진 변수 "Explosion" 생성 

생성한 변수를 Set으로 가져온다. 

 

위에서 GET(Actor) 은 자식이고 SET(BP_06_Explosion ) 은 부모이기 때문에 형변환을 해서 위와같이 세팅해 주어야 한다. 

 

4) Begin Overlap 이벤트 함수 설정  

Explosion 변수를 가져 와서 그 안에 있는 Explosion 함수를 가져와서 컴파일 한 후 게임모드로 들어가면

다음과 같이 폭발을 확인 할 수 있다. 

 

 

그래픽을 확인하며 자연스러운 위치에 파티클 그래픽 옮겨주기 

1. Make Vector 함수 생성 및 옮기고 싶은 위치 입력(x, 300)

2. Vector - Vector 후 새로운 위치 값 Location에 넣어주기 

 

폭발 구현 

범위 안의 아이들을 감지해서 날아가게 하기 위해 "BP_06_Explosion" 블루프린트 설정 

 

1. "MultiSphere Trace For Objects" 함수 생성 

범위 감지에는 다양한 타입이있지만 스피어 오브젝트 형태를 기반으로 진행하기 위해 다음과 같이 함수를 생성

   - sphere : 구 모양 충돌 범위에서 가장 가까운 하나만 검출 

   -MultiSphere : 구 모양 충돌 범위에 있는 모든 것 검출 

 

2. Get Actor Location 함수 생성 후 범위를 감지하기 위한 시작위치, 끝위치 설정 

   - 블루프린트 위치를 가져와 사용하지만 끝위치의 경우 "Make Vecoter" 함수를 이용
(기존위치에서 z값 100을 더해 위쪽에서 끝나게 함)

   - 물체를 찾을 반경값인 Radius 값을 300 으로 설정 

* 시작지점 구, 끝지점 구, 중간지점 구 여러개로 탐지할 공간이 설정된다고 받아들이면 되며 캡슐과 비슷한 범위를 지정한 상태임 

 

3. Object Types 끌어와서  배열만들기 및 "Physics body" 설정

Cube 생성 시 simulate  Physics를 활성화 했기 때문에 Physics 가 잘 작용할 것이라고 기대할 수 있음

   - Actors to Ignore : 자기자신에게 충돌체가 없으니 활성화 할 필요 없음 

   - Debug Type : One Duration (1회 주기이기 때문에)

   - Trace Color / Hit Color : 보통 강사님이 초록 - 빨강으로 하신다고 하셔서 같게 설정함 

   - Duration : 10초 정도로 설정 

 

위 단계를 마치고, 컴파일 후 확인해보면 다음과 같이 충돌 반경이 설정되어 있는 것을 확인할 수 있음 

(Trigger를 밟았을 경우 활성화)

녹색, 붉은 색 안의 구역이 모두 검출이 되며 녹색이 시작반경, 빨강이 충돌된 전체 반경이다. 

구간을 설정하였으니 충돌된 애들을 다 찾아내어 검출해야한다. 

 

4. 검출하기 위해 반복문 "For Each Loop" 함수를 생성, 충돌이 하나라도 됐으면 True가 나옴 

   * 반복문 연결 실수 주의 (2개 연결해야 함)

Array Element 에서 뽑아내야 하는데 구조체 핀분할 하면 데이터가 너무 많이 나오기 때문에 "break hit result" 로 뺀 후

"Hit component" 에 충돌 된 아이들의 "Static Mash component" 형변환을 씌워 이 형태인 애들만 꺼낸다. 

(이 형태인 아이들만 형변환이 되기 때문에 큐브들만 나옴)

 

 

5. "Add Radial Impulse" 함수 생성 및 설정 

힘 처리에는 두가지 종류가 있다. 

   1) Force : 자신이 힘을 가지고 다른 물체에 힘을 전달 / 처음에 날리는거  

   2) Impulse : 외부로부터 힘을 받아 물체가 움직임 / 날리는 걸 맞아서 힘을 받는 것 

 

현재 작업의 경우 폭발의 힘을 받아서 날아가는 물체들에 대해 설정해 주는 것이기 때문에 "Impulse"로 계산을 하여야 한다.

 

   - 타깃 : 검출해낸 메시들이 힘들 받는 것 

   - Origin : 어디부터 힘을 받는건지 넣어주기, "get actor location" (현재 블루프린트 actor location)

   - Radius : 아까 폭발범위 300으로 지정하였으니 맞춰서 300

      * BP_06으로 부터 이 Radius 범위 벗어난 애들은 힘을 못받음 

   - Strength : 현실에 가깝게 질량에 따라 힘 다르게 받게 설정하기 위해 사용 

      * Get Mass 값을 가져와서 float * float 을 사용해 값을 확장시켜주고(1000정도) Strength 연결 

   - Falloff 

         1) RIF Constant : 지정한 범위(Radius) 안에 힘이 동일하게 적용

         2) RIF Linear : 시작 지점부터 끝 지점까지 거리에 따라 힘이 점차 줄어듬 

 

다음시간엔 칼을 빼고 넣는 동작을 진행 할 예정인데, 인게임에서 가장 중요한 것중 하나인 전투 관련 시스템을 배우게 된다니 기쁘다. 

이번시간도 정말 알찼고 다음시간 수업도 기대가 된다.