Programming/UnrealEngine

[UnrealEngine5] F-18 전투기 날리기(2)-전투기 모델 적용하기(Feat. TOPGUN:MAVERICK)

stein 2022. 7. 31. 19:06

프로젝트 게시글
[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에 등장한 마지막 미션 구현하기 👉

 

현재까지 1,2번 기체 움직임에 관한 작업은 마무리 되었다. 이제 디자인적인 부분들을 만져보자.

 

진행

3. Cube를 F-18 모델로 변경

- 모델 설명

Unreal Engine Marketplace에 올라와 있는 F/A-18C 모델

Vigilante에서 제공하는 탑건2에 등장한 F-18 기체이다. 물론 C는 훈련용이기에 약간 다르지만(1인승vs2인승) 이정도면 매우 준수하다고 판단했다.

프로젝트에 asset을 추가하면 생기는 contents
기본적인 관절 부분들은 모두 작동한다.

해당 스토어에 적혀있는 방법으로 세팅을 완료하면 위에서 보이는 것 같이, 각 관절 부분들도 조종할 수 있는 showcase를 확인할 수 있다. 각각 회전, 속도, 등등을 변수로 해서 움직이는 함수를 만들면 사실감을 높일 수 있겠다.

 

- 코드 변경

before->after

 

cube가 원래 차지하고 있던 부분을 collision box로 변경하고, 내부에 F-18 skeletal mesh를 넣어준다. 

 

원래 이 부분에서 skeletal mesh에 physics asset을 사용하여(content에 포함되어 있다) 실제 collision과 동일하게 사용하려 했으나, kinematic/simulated 을 고르는 physics type의 문제인지 기체가 자꾸만 망가졌다. root 부분을 simulate할 수 있어야하는데 그 부분이 잘 되지 않은걸로 보이는데, 해결하지 못하였기에, 위와 같은 약식으로 진행하였다. modeling쪽 공부를 더 할 필요가 있다.

physics asset으로 collision을 잡을 시, 제대로 구현되지 못하는 기체

 

문제 없이 비행한다.

문제없이 기체가 비행한다! 이제 애니메이션을 넣어 더욱 실감나게 만들어보자.

 

4. F-18모델의 애니메이션을 추가(활성화) 

- 기체 구조 파악 및 연결

https://m.blog.naver.com/mria0352/221567775313

 

항공기의 날개 구조, 플랩과 에일러론 및 엘리베이터와 러더

우리가 알고 있는 항공기의 디자인은 자연에서 가져온 디자인입니다. 주로 날아오르는 새들의 모습을 참조...

blog.naver.com

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=pilot_log&logNo=110030207875 

 

전투기의 조종

전투기는 그대로 똑바로 날기만 해서는 의미가 없다. 조종사가 마음먹은 방향으로 움직일 수 있어야 비로소...

blog.naver.com

 

위 게시글들을 참고하여 전투기의 기본 구조를 알 수 있었다. vigilante에서 제공해준 animation blueprint(ABP_West_Fighter_F18C_Showcase)에 가보면 flap,aileron,rudder,stabilizer가 있는것을 확인할 수 있다.

변수로 제어할 수 있는 animation

그리고 get anim instance를 사용하여서 해당 변수들을 제어한다. 제어할 값은, 기존에 설정한 arrow rotation에서 대부분 가져오고, rudders와 stabilizer의 행동은 구현되어 있지 않았으므로 추가로 구현해주어 넣어준다.

.

- after burner 추가

기체 엔진 부분에서 나오는 연소불꽃을 after burner라는 fx로 제공해주고 있다. 이를 현재 기체에 잘 배치해 주고, engine power에 맞게 transform을 하여 크기를 변경시키도록 했다. 

engine power에 따라 길이가 변하는 after burner

이 때, after burner의 원형고리 effect들이 기체를 따라가지않고, 최초 spawn된 위치에만 있는 것을 확인하였다. 검색해보니 local space로 fx를 세팅해야한다고 하더라. particle system파일에서 링들 하단에 있는 required+(사진에서 노란색)을 클릭 후, use local space 옵션을 true로 변경해주자.

Rrequired+ > use local space: true

engine power는 방향키 up, down을 사용해서 값을 변경하도록 하였다. 그런데 이산적으로 그냥 단순 덧셈을 하니, after burner도 뚝뚝 끊어져서 transforming이 되었기 때문에 target값으로 따라갈 수 있는 코드를 추가해 주었다.

엔진이 부드럽게 커지고 작아진다. 갑자기 꺼지고 켜지는것은 engine on/off 기능

이제 확실히 그럴싸하게 기동한다!

결과

위에 서술한 내용 말고도, 진행 속도에 따라 추가되는 양력이나, 컨트롤 부분과, 질량,중력과 같은 부분도 조금씩 다듬어 가며 조작감을 좋게 만드는데 신경을 썼다. 해당 부분들이 없더라도 기본적인 기동은 대부분 가능하므로 본 게시글에서는 생략하겠다.

 

원래 현재 수준까지 개발이 목표였지만, 또 막상 만들고 나니 허전한 느낌이 있다. 따라서 다음 게시글에서는 UI를 추가하여 현재 속도, 고도, 기울기 등등을 띄우고, 탑건2에서 나온 미션을 수행하는 게임을 구현해볼 예정이다.