탑건: 매버릭 미션 개발하기 #1 : 비행기 교체

Lunetis·2022년 7월 23일
0

탑건: 매버릭

목록 보기
2/14
post-thumbnail

이 프로젝트는 이전에 개발한 프로젝트를 기반으로 합니다.

이전에 사용했던 유니티 버전은 2020.2였는데 이번에는 최신 LTS 버전인 2021.3으로 다뤄보겠습니다.
다행히 업그레이드 후에 문제가 발생하지는 않았습니다.

먼지가 쌓인 프로젝트를 열었더니 머리가 아프네요. 일단 쉬운 것부터 다뤄야겠습니다.

가장 먼저 할 일은 기존에 사용했던 F-15C를 영화에서 나온 F/A-18E/F로 교체하는 것입니다.


F-15는 미국 '공군', F/A-18은 미국 '해군'에서 운용하는 전투기(정확히는 함재기)입니다.
탑건과 탑건: 매버릭에서 등장하는 F-14도 '해군'에서 운용하는 함재기입니다.

1986년 탑건이 흥행하던 당시 영화에 나온 F-14를 보고 단순히 "전투기면 공군이지"라는 생각으로 공군에 지원했다가 퇴짜를 맞는 경우도 있었다고 합니다. 어쨌거나 애국심을 고취하는 데에는 끝내줬고, 그 때나 지금이나 미군 지원자가 늘었다는군요.

이제는 공군도 적극적으로 홍보한다고 합니다.

https://www.cadnav.com/3d-models/model-46195.html

무료로 사용할 수 있는 F/A-18 모델링이 여러 개가 있는데,
그 중에서 가장 치장이 적은 모델을 가져왔습니다.

근데 저 사이트가 100% 합법인지 모르겠습니다. 누가 만들었는지에 대한 표기도 없고...

그렇지만 깔끔한 모델링을 구하려면 여기 외에는 좋은 대체재가 보이지 않습니다.


모델링을 불러왔을 때 이렇게 잘 나눠져있기도 하고요.
이름도 잘 써져 있어서 구분하기 좋네요.


날개 제어

이전에 만들었던 AircraftModelController라는 컴포넌트가 있는데,
이 컴포넌트는 움직임에 따라서 비행기의 날개 부분들을 조금씩 움직여주는 역할을 합니다.

이걸 복사해서 새 비행기에 붙여넣고, 비행기의 부품들을 추가해놓겠습니다.

F/A-18은 브레이크 부분이 없기 때문에 Brake 부분이 None으로 되어있는데,
과거의 저는 여기가 null이면 예외 처리를 해놓았을까요?

네, 그런 거 없군요.

간단하게 null 체크만 추가하겠습니다.

그리고 AircraftController에 연결된 컴포넌트롤 F/A-18에 있는 컴포넌트로 바꿔주겠습니다.



...?



도대체 뭐가 어떻게 되고 있는 것인지 하나씩 뜯어봅시다.



날개 중심축 변경

Toggle Tool Handle Position 부분을 Pivot으로 선택한 다음 확인해봅니다.

F-15에서는 파츠가 이렇게 움직이지만,

F/A-18은 이런 식으로 움직이고 있습니다.

심지어 어떤 날개 부분은 회전축이 기체 중앙에 가있어서 이 지경이 나기도 하죠.


어쨌든, 비행기 날개들의 회전축을 바꿔줄 필요가 있습니다.

빈 오브젝트를 만들어서 회전축으로 둘 자리에 놓고,

날개를 빈 오브젝트 하위에 둔 다음,

회전을 시켜서 원하는 위치로 회전축이 맞춰졌는지 확인합니다.

수동으로 조정하는 만큼 약간의 오차가 있을 수는 있지만, 신경쓰일 정도가 아니라면 넘어갑시다.

그렇게 모든 날개 부분의 회전축을 새로 맞춰주고,

컴포넌트에는 새로 만든 회전축으로 다시 연결해줍시다.

이제 제대로 맞춰진 모습입니다.


엔진 및 특수 효과

엔진의 화염을 표현하는 파티클 시스템의 크기도 조절하고,

비행운을 만들어주는 파티클 시스템과, 피격 시 연기가 나는 곳의 위치도 맞춰줍니다.

이 비행운을 약간 손을 봐야 하는데, 이전에는 그냥 비행하는 중에 계속 비행운이 그려졌지만 실제로는 급기동을 하는 상황에서 그려지는 것이 일반적입니다.

Pitch가 변화할 때만 비행운을 그리도록 바꿔보겠습니다.

비행운을 만드는 오브젝트는 Trail Renderer 컴포넌트를 가지고 있습니다.

여기서 Emitting을 껐다 킴으로써 비행운을 그리다가 도중에 끊을 수 있습니다.

[SerializeField]
TrailRenderer[] trails;

void TrailControl()
{
    if(trails != null && trails.Length > 0)
    {
        foreach(var trail in trails)
        {
            trail.emitting = (pitchValue != 0);
        }
    }
}

void Update()
{
	...
	TrailControl();
}

간단하게 pitchValue가 0이 아닐 때만 emitting을 true로 두도록 바꿔주겠습니다.


엔진에 맞는 크기로 애프터버너 효과를 설정했는지를 확인하고,

Pitch에 변화가 있을 때만 비행운이 만들어지는 것도 확인합시다.


카메라 설정

3인칭은 괜찮은데 1인칭 시점을 조금 조정해야겠죠.

계기판이 보이지 않아야 하는 카메라의 Culling Mask를 보면 Aircraft가 체크 해제되어 있습니다.
이 카메라는 Layer가 Aircraft인 오브젝트는 그리지 않는다는 뜻입니다.

그렇다면 추가한 비행기 모델링의 Layer도 Aircraft로 바꿔줘야겠죠.

카메라 위치도 잘 조정한 다음,

UI와 콕핏이 맞는 위치에 있는지 확인합니다.

이 모델링은 콕핏이 그렇게 정교하게 만들어지지는 않았습니다만...

무료 모델링이니까 봐줍시다.

그리고 이전에 사용했던 F-15보다는 낫습니다.



무기 발사 위치 수정

미사일과 기총이 발사되는 위치는 빈 GameObject로 지정되어 있습니다.

재밌게도 미사일 발사 위치는 이전 비행기 위치에 맞춰져 있는 상태인데도 불구하고 어느 정도 맞는 자리에 있네요. 조금만 수정하면 될 것 같습니다.

그리고 F/A-18의 기총은 코 부분에 달려있다고 하는데요,

모델링에서 어떻게 생겼는지 봅시다.

예...

대충 놓아줍시다.


지정된 위치에서 잘 발사되는지 확인합니다.



UI

마지막으로 손 볼 부분인 여기입니다.

손상도에 따라서 이 기체 부분의 색깔이 바뀌어야 하는데, 지금은 F-15 그림이 그려져 있죠.

이렇게 생긴 그림을 만들어줘야 합니다.


http://thanlont.blogspot.com/2011/04/natf-better-is-enemy-of-good-enough.html

여기 괜찮아보이는 그림이 있네요.

선을 딴 그림을 가져와서 이렇게 만들어줍시다.

프로젝트에 이미지를 넣은 다음 UI에 등록하고,

잘 보이는지 확인합니다. 사실 이 정도 바꾸는 것 정도로 문제가 있기 힘들죠.



성능 조정

F-15 기준으로 맞췄던 비행기의 성능을 조정합시다.

가령 F-15의 최고 속도는 마하 2.5인 반면 F/A-18의 최고 속도는 마하 1.8로 알려져 있습니다.

이 부분을 손대야 한다는 뜻이죠.

이 값을 설정할 당시에 제가 마하 단위에 100을 곱한 값으로 계산했는지는 모르겠습니다만,
그런 것 같으니 비슷하게 적어줍시다. (아마 그 때 게시글을 보면 알겠죠)

근데 속도 부분을 손대고 나면 선회력도 손대야 할텐데, 문제는 이 전투기들의 선회력을 판단할 수 있는 신뢰할 만한 기준이 별로 없다는 것입니다.
익면하중에 관한 정보도 확인해봤는데, 비행기의 선회력이 익면하중과 어느 정도 반비례하긴 합니다만 항상 들어맞는 것도 아닙니다. 정확히 계산하려면 비행기의 모양이나 엔진 추력 등 온갖 데이터를 가져와야 하기 때문이죠.

그러므로, 선회력 부분은 그냥 그대로 두겠습니다.


F-15와 F/A-18 두 기체에서 사용되는 무기도 동일합니다.

기총은 M61 벌컨포(M61A1과 M61A2 모두 사용됨)를 탑재하고,
미사일은 AIM-9 사이드와인더 계열 미사일을 탑재할 수 있습니다.

대신 한 가지 추가할 게 있는데, 탑건: 매버릭에서는 임무 수행을 위해 F/A-18에 AIM-9 사이드와인더 미사일과 GBU-24 레이저 유도 폭탄을 탑재합니다.

미사일은 지금 사용하는 코드를 그대로 사용하면 되겠지만,
레이저 유도 폭탄은 새로운 코드를 만들어야겠네요.



앞으로 할 일

생성한 프로젝트의 README를 작성하면서 해야 할 일을 생각해봤습니다.

  • F/A-18로 플레이어 전투기 모델링 변경
  • 레이저 유도 폭탄 구현
  • 다수의 적 유닛이 UI에 표시되도록 수정
  • 지대공 미사일(Surface-to-Air Missile, SAM) 구현
  • 맵 디자인
  • 미션 구현
  • 대사 추가
  • 미션 컷씬 추가
  • 난이도 추가
  • 메인/결과 화면
  • 빌드 및 배포

다음 편에서는 새 무기(?)를 개발하는 과정을 다뤄야겠습니다.

각 항목마다 3-4일씩 걸린다면 2학기 시작 전에 프로젝트를 완성할 수 있겠네요.
주기를 지킬 수 있을만큼 머리가 잘 굴러가야 하는데 말입니다.

그리고 과거의 제가 재사용성이 좋은 코드를 만들었기를 빕니다.

이 프로젝트의 작업 결과물은 Github에 업로드되고 있습니다.
https://github.com/lunetis/OperationMaverick

0개의 댓글