이번 시간에는 특정 공간안에 있는 물체들을 찾아내고 힘을 줘서 효과(폭발) 을 연출
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 : 시작 지점부터 끝 지점까지 거리에 따라 힘이 점차 줄어듬
다음시간엔 칼을 빼고 넣는 동작을 진행 할 예정인데, 인게임에서 가장 중요한 것중 하나인 전투 관련 시스템을 배우게 된다니 기쁘다.
이번시간도 정말 알찼고 다음시간 수업도 기대가 된다.
'Unreal Engine > 게임클래스 - 언리얼엔진 기초' 카테고리의 다른 글
[16강] Animation Retargeting - 2 (0) | 2023.08.18 |
---|---|
[15강] Animation Retargeting - 1 (0) | 2023.08.18 |
[13강] Asset Migration (0) | 2023.08.17 |
[12강] Line Trace와 Material (0) | 2023.08.16 |
[11강] 객체 찾기와 반복문 (0) | 2023.07.25 |