Programming/UnrealEngine

[UnrealEngine5] F-18 전투기 날리기(4)(完)-미션 생성하기(Feat. TOPGUN:MAVERICK)

stein 2022. 8. 14. 23:50

이전 게시글
[UnrealEngine5] F-18 전투기 날리기(1)-전투기 움직임 구현(Feat. TOPGUN:MAVERICK)
[UnrealEngine5] F-18 전투기 날리기(2)-전투기 모델 적용하기(Feat. TOPGUN:MAVERICK)

[UnrealEngine5] F-18 전투기 날리기(3)-전투기 UI 구성하기(Feat. TOPGUN:MAVERICK)

[UnrealEngine5] F-18 전투기 날리기(4)(完)-미션 생성하기(Feat. TOPGUN:MAVERICK)🚩

계획

1. Cube로 비행 움직임 구현(controller까지 받음) ✅
- 힘 방향 계산- 힘 적용
2. 움직임에 맞게, 기체의 rotation구현 ✅
3. cube를 F-18 모델로 변경 ✅
4. F-18모델의 애니메이션을 추가(활성화) ✅
5. 전투기 UI 구성하기
6. 탑건2에 등장한 마지막 미션 구현하기 🔨

https://youtu.be/qNP0LBags5c

 

 F-18의 기동에 따라 현재 상황을 반영해주는 UI가 구성되었다. 이제 미션을 실시할 수 있는 map을 구성하고, 실패 조건을 추가하고 F-18을 배치해보자.

 

 

진행

6. 탑건2에 등장한 마지막 미션 구현하기

- 미션 조건

1. 해당 지역은 산맥 지형이다. 협곡을 구성하여서 기체가 그 경로를 통과해야 한다.

2. 저고도 비행으로 협곡을 통과해야 한다. 고도가 올라가면 지대공 미사일에 격추당한다.

3. 골짜기 마지막에는 높은 산맥이 나오는데, 이를 배면비행으로 속도를 줄이지 않고 넘어가야 한다.

4. 그 후, 타겟 지점에 미사일을 락온하여야 한다.

5. 마지막으로, 타겟 바로 뒷 지점에는 첫 번째 산맥보다 더 급격하게 높은 산맥이 등장한다. 기수를 잡아당겨서, 위로 급격하게 올라가되, 10G를 넘기지 않아야 G-LOC(블랙아웃)이 발생하지 않는다.

6. 마지막 탈출시 저고도 비행을 할 수 없으니, 지대공 미사일에 감지된다. 따라서 최고속도로 작전 지역을 이탈한다.

 

얼마나 구현을 할 수 있을지는 모르겠지만, 순서대로 최대한 만들어 보자.

 

- 지형 구성

1. 해당 지역은 산맥 지형이다. 협곡을 구성하여서 기체가 그 경로를 통과해야 한다.

Marketplace에 있는 산악 지형 프로젝트

산악 지형이 market place에 있어서 해당 프로젝트를 가져왔다. 그렇다, 기존과 같은 library여서 project에 add 하는 방식이 아니었다..! 그래서 프로젝트 2개를 합쳐보려고 이것저것 노력해 봤으나, map 구성을 blueprint로 구성하는 방식은 처음 봤기에, 제대로 된 import를 할 수가 없었다. 그래서 결국 지형만 가져오고, 표면의 여러 material과 같은 효과들은 가져오지 못하였다. 너무 아쉽지만 다음에 제대로 공부해서 구현해보자.

이번 기회 덕분에, Landscape를 기본적인 수준으로는 다룰 수 있게 되었다.

marketplace에서 가져온 지형을 기본으로, sculpting과 erosion으로 mission에 사용될 map을 구성해 보았다. 크기가 마음에 들지 않아서 scale값을 이리저리 바꾸고, 기체의 크기도 1/10로 줄였다(그에 맞게 상수들도 변경함)

https://www.world-machine.com/download.php

 

Download World Machine Basic - Free Terrain Creation

Compatible with Windows 7+ World Machine runs natively on a Windows PC. (Mac/Linux users: No official support is available. However, we've heard good things using Parallels & WINE) Full of Examples Use our examples and other content to get started on your

www.world-machine.com

world machine이란 무료 지형 제작 프로그램이 있어서 쭉 살펴보았지만, 이번에는 Unreal에 있는 기능과 위 프로젝트만으로 가능하다고 판단하여 tutorial만 진행해보고 중단했다. 이 프로그램도 완전히 모든 지형을 생성한다기보다는, 기본적인 지형에 원하는 효과를 이것저것 추가하는 것으로 느껴졌다(지형 생성 기능을 못 찾은 걸 수도 있다)

비행하는 느낌이 난다. 고도를 높이지 않는게 생각보다 매우 어렵다!

그래도 이제 비행을 시작했고, 직접 플레이를 계속하면서 난이도도 조절하였다.

 

- 제한 사항 구현

2. 저고도 비행으로 협곡을 통과해야 한다. 고도가 올라가면 지대공 미사일에 격추당한다.

저고도 비행 지역을 collision box로 설정

collision box를 배치하여서, 해당 collision box내에서는 높이를 일정 이상 올라가게 된다면 기체가 destroy 되도록 설정하였다.

overlap으로 flag를 on/off로 만들고, destroy 조건 체크여부를 flag로 판단한다.
좌측상단에 print로 collision box 진입, 고도 초과가 잘 뜨는 것을 확인할 수 있다.

이제 피격당하는 효과를 넣기 위해서, Damaged actor로 전환과, 여러 폭발 관련 particle을 추가해주었고, 고도 초과 시 해당 효과들이 발생하고(activate) 보이도록(visible) 설정하였다. 그리고 폭발 이후 contoller를 disable 시켜주었다.

파괴된 기체 효과 배치 및 활성화

그리고 5000m에 가까워질수록 기준으로 고도계의 색깔이 빨간색이 되도록 설정해주었다.

5000m에 가까워질 수록 G->R로 이동한다.
효과가 구리다. 나중에 디자인도 공부하자

3. 골짜기 마지막에는 높은 산맥이 나오는데, 이를 배면비행으로 속도를 줄이지 않고 넘어가야 한다.

 실제로 배면비행은 머리로 쏠리는 G값은 위험하기 때문에 다리 쪽으로 G를 받기 위해서 시행되는데, 현재 G값의 구현이 현실적이지 않으므로(+,-가 고려되지 않음), 상승의 힘보다, 하강의 힘을 낮추어서 배면비행을 하지 않으면 기동이 더욱 어렵도록 설정하였다.

 

 그리고 최적의 비행을 했을 때 빠르게 통과할 수 있기 때문에, 미션 전체에 시간제한을 걸어주었고, 해당 사항을 우측 상단에 띄워주었다. 타이머는 협곡을 지나가면서(고도제한 적용 구간부터) 시작된다.

우측상단에 표시된 타이머

그리고 마지막 최고 능선을 넘은 뒤, 초록색 박스를 통과하면 타이머가 중단된다.

최종적으로 능선을 넘어서 저 box를 통과해야 timer가 중단된다.

 시간제한을 지키기 위해서는 최대한 정확한 기동, 속도가 필요하게 되었다.

 

4. 그 후, 타겟 지점에 미사일을 락온(Lock-on)하여야한다.

 락온은 기체의 정중앙 방향에 타겟을 위치시키면 락온이 진행되고, 수초 후 락온 후, 미사일을 발사시키는 방식으로 구현하였다.

 타겟을 조준하고 있는 것은 line trace를 사용하여 collision이 타겟인지 판단하고, 타겟이 맞다면 lock on count라는 변수를 변경시켜 락온을 진행시켰다.

 락온의 진행상태를 보여주기 위하여 가운데 마름모꼴 마크를 추가하였고, 락온이 진행되는 정도에 따라 초록색-> 빨간색으로 색상이 변화한다.

HUD에 구현한 락온 마크

그리고 락온이 완료되면 미사일을 발사해야 한다. 미사일 모델을 market store에서 찾아보자!

밀덕 unreal 개발자들은 정말 좋겠다.. 다 있다

역시나 미사일도 무료로 풀린 모델이 있었고 vigilante에서 만들어 주었다(비질란테야, 고맙다!)

아래는 락온 후, 미사일 발사까지 구현한 gif이다.

기분 좋게 날아간다.

 

잘 날아간다! 하지만 사운드가 없으니 너무 허전하다. lock-on 관련 사운드를 추가해주자.

이것저것 beep sound를 구글링 해보았으나 별로 마음에 드는 소리가 없어서 synth를 이용해서 소리를 만들었다.

 

unreal 보다 한결 친근한 친구를 찾아왔다.
S_lock-on_aiming.wav
0.55MB
S_lock-on_ready.wav
0.55MB

필요하신 분은 쓰시라~

 

락온과 관련된 blueprint

미사일 사운드도 찾아서 넣어주자.

 

 

위 유튜브 영상에서 사용된 소리를 추가해주었다. 그리고 타겟 명중 시 폭발은  starter content에 있는 explosion 소리와 효과를 사용하였다.

슈우웅~펑

사운드를 추가하는 김에, 기체의 소리도 추가해주었다.

위 영상의 2가지 기체 소리를 모두 가져와서, high, low engine sound로 넣어주고, starter content에 있는 바람소리와 불 소리(!)를 섞어서 소리를 구현했다. 아무래도 이것저것 잡 소리를 섞어서 만들어서 사운드 퀄리티는 매우 좋지 않다. 하지만 처음 만들어보는 언리얼이니 이 정도에서 타협하고 넘어가자.

바람과, 불과, 엔진으로 만들어낸 엔진소리

 

5. 마지막으로, 타겟 바로 뒷 지점에는 첫 번째 산맥보다 더 급격하게 높은 산맥이 등장한다. 기수를 잡아당겨서, 위로 급격하게 올라가되, 10G를 넘기지 않아야 G-LOC(블랙아웃)이 발생하지 않는다.

 

마지막 구현이다. (6번은 3번에서 구현 완료)

일단 현재 문제는 G값이 10은 훌~쩍 넘어간다는 것. 왜냐하면 애초에 1 마하 운용을 한다는 것 자체가 말이 안 되기 때문이다. 저고도 침투 비행인데 소닉붐 일으키며 갈 수는 없지 않은가.

 

 DCS에서 구현된 매버릭 미션을 보는데 속도가 500노트 -> 926km/h 정도인데, 저 정도 속도로 날아가니 재미가 없어서 속도는 확확 변할 수 있게 구현했다.

 결국 원심력에 의해 속도에 큰 영향을 받는 G값이 엄청나게 튀게 된다. 특히 급속으로 속도를 올리고 낮추는 과정도 마찬가지이다. 인간이 실제로 버틸 수 있는 G값은 10G이므로, 이 값으로 max scaling을 해주려고 한다. 꼼수이긴 하지만 지금 만드는 게 가상 시뮬레이션 게임이 아니므로 재미 목적으로만 봐주길 바란다.

 

물리학자 기만용 함수

먼저 꼼수에 핵심이 될 함수를 생각해보자. 9G까지는 일반적으로 계산되지만, 9G부터는 매우 완만한 기울기를 가져서, 실제로 50G쯤 되었을 때 10G를 표시하도록 하는 것이다. 1차 방정식 2개만 생성하면 된다. 위 함수를 blueprint로 만들어보자.

물리학자 기만용 blueprint

이제 10G를 넘기기는 매우 힘들어졌다.(상수 값은 추후 최적화를 진행하면 됨)

blackout을 구현하기 위해서 9.5G부터 서서히 화면이 비네팅(가장자리가 어두워지는 효과)되도록 구현해보자.

 

카메라 액터에 내장된 비네팅(vignette)효과를 설정해주고, post process weight를 적절하게 조정한다

카메라 액터에는 비네팅 기능이 내장되어 있다. 하지만 이 효과의 정도는 dynamic 하게 변경할 수 없기 때문에, 비네팅을 최대한으로 부여한 뒤, camera post process의 전체 weight을 변경하는 식으로 구현해야 한다.

의도적으로 큰 G값을 만들어보았다. 비네팅이 잘 작동한다.

하지만 실제로 게임 플레이에 적용해보니, 비네팅이 집중을 너무 방해하여 마지막 상승에 z 축 높이에 따라서 비네팅 값을 주도록 변경하였다.

비네팅이 회복되는건 천천히 사라지도록 구현함
높이가 올라감에 따라, 비네팅이 심해진다.

야매스럽지만 black out까지 구현 완료!

 

이렇게 모든 제약조건 구현을 모두 완료했다.

 

최종 마무리

1. Cube로 비행 움직임 구현(controller까지 받음) ✅
2. 움직임에 맞게, 기체의 rotation구현 ✅
3. cube를 F-18모델로 변경 ✅
4. F-18모델의 애니메이션을 추가(활성화) ✅
5. 전투기 UI 구성하기 
6. 탑건2에 등장한 마지막 미션 구현하기

 

 위 모든 과정을 거쳐서 어떻게든 꾸역꾸역 다 만들어냈다😂

 

 생각보다 복잡했고, 생각보다 간단했고, 많이 배운 프로젝트였다.

 

 총 제작기간은 일수로 따지면 16일, 실제로 구현한 시간을 생각해보면 대략 50시간 내외가 아닐까 싶다.

 

 아래는 최종 플레이 영상!

 

 

에필로그

프론트만 줄창 만들다가, '정말 이 분야가 너가 진정 좋아서 하는 분야가 맞니?'라는 질문을 받았다. 그렇게 자연스럽게 게임 개발자가 내 눈에 밟혀버리고 말았고. 하지만 취업까지 빠르면 1년정도만 남겨놓은 상태에서 갑작스럽게 프론트에서 게임으로 전향하는건 겁이 나는 일이었고, 방학기간 동안 언리얼을 해보고 결정하기로 했다.

 

 그렇게 공부를 계속하다 그나마 게임다운걸 만든게 이 탑건 프로젝트이다.

 

 나름 이 정도면 성공한 프로젝트이고, 많은 공부가 되었다. 하지만 마음을 굳히기에는 여전히 불안감이 남아있다. 개강까지 남은 기간 15일간에, 또 어떤 경험을 하게 될지, 얼마나 배울지가 선택에 영향을 주리라 생각한다.