프로그래밍/Unreal 부트캠프

TIL 2025.02.04 기록

Rozentea 2025. 2. 4. 23:03

0. 개요


오늘은 과제를 집중적으로 했다.

드론 움직임을 만드는데, 드론을 실제로 조종해본적이 없어서 감이 너무 안잡혔다.

요구 사항은 입력으로 회전을 한다음 직진, 상승 등등을 하면 회전된 방향으로 이동하는 그런것이었따..

 

음.. 나도 회전도 하고, 최대로 회전한 방향과 전진방향이 동기화 되도록은 만들었는데, 음.. 요구하신게 이게 맞는지 잘 모르겠다.

 

그래도 드론에 가속도를 적용시켜서 꽤 볼만했다.

 

드론을 마무리하고 나서는 레벨을 만들었다.

물론 아직도 만드는 중이다.. ;ㅅ;

레벨만 완성한다고 되는게 아니라.. Grab 구현하기

물체들이 잡힐 수 있도록 Scelectable Interface 만들기

레이저 퍼즐 클리어 조건 만들기

 

이 3가지를 모두 마쳐야 비로써 레벨 하나가 만들어진다... 해당 기능들을 반드시 만들어야 하기 떄문에.. 아냐 할 수 있다..!

 

으아.. 감기 기운 미치겠다.. ㅠ

 

1. 과제


1. 드론 시점 회전하기

단순히 마우스 회전과 Q, E키를 통해 시점을 회전 시킨게 전부라 금방 끝났다..

음.. 문제는 이제 움직임이 이런게 나오는게 아니라 더 드론스럽게 나와야한다는 점인 것 같다..

 

2. 드론 완전 자유 이동 구현

요는 위 사진 처럼 일정 값만큼 회전시킨 방향과 드론의 진행방향(ForwardVector 등)이 일치되어야 한다는 점이다..

 

문제는 이렇게 하면.. 처음 움직일 때는 하늘을 향해 가다가 점점 앞쪽으로 이동하는 식이 될 텐데.. 이게 과연 좋은 조작감이냐는 것이다.

 

때문에 일단 구현을 먼저 해보고, 조금씩 깎아나가는 방향으로 구현해 보려한다.

 

하다보니.. 가속도도 적용해보고, 사인 그래프 보간을 이용해서 보다 부드러운 이동을 적용했다.

또, 틸트도 추가해서 더 자연스러운 움직임을 보여줄 수 있도록 구현했다.

 

물론 과제에서 제시한 것 처럼 입력 -> 회전 -> 출력 이런식으로는 안했고, 입력을 받으면 점점 회전하는 방향으로 구현했다.

아니.. 진짜 실제 드론을 조종해본 경험이 없어서 드론의 움직임이라는게 진짜 진짜 감이 안와서 너무 힘들었다.. ;ㅅ;

 

3. 중력 추가 및 충돌 처리

중력에 반대되는 힘인 양력이 없이 중력만 적용하다 보니.. 중력이 너무 쎄게 작용하는 문제가 발생한다..

 

근데, 드론이 하늘에 가만~~히 떠있을 수도 있고, 중력을 받아서 아래로 떨어지는 것은 드론이 더 이상 날개짓을 안하는.. 그니까 시동이 꺼졌을 때 아닌가? 하는 생각이 들었다.

(어짜피 드론은 계속 날개짓하니까 공중에 멈춰있다는 거지! 음음!)

 

때문에 중력이 작용하지 않고 있다가, 드론의 시동이 꺼지면 그때 중력이 작용되도록 구현 방향을 틀었다.

거기다가 드론의 시동을 끄게되면,  드론을 조작할 수 없게 할 것이다.

 

4. 드론 시동 끄기

T키를 누르면 시동을 끌 수 있다..! 이렇게 구현했다. ㅎㅎ

시동이 꺼졌을 땐 드론 조작이 불가능해지고, 다시 전원을 켜주어야 조작이 가능하도록 구현했다.

또 시동이 꺼졌을 땐, 중력의 영향을 받아 드론이 땅으로 떨어진다.

 

5. 드론에서 플레이어로 되돌아가기

플레이어가 드론을 소환해 드론 시점으로 바꾸던 그 키와 동일하게, 4번 키를 입력하면 드론 시점에서 플레이어 시점으로 돌아가도록 구현했다.

이때 드론의 경우 삭제를 시켜주었다.

 

6. 캐릭터 클래스를 상속받은 플레이어로 변경하기

레벨을 먼저 작업하다가 알아차린 건데.. 다음 영상을 봐보자.

직접 이동과 충돌 처리를 구현한 폰 캐릭터는 빗면을 이동할 때, 미끄러짐 벡터도 제대로 안구하면서 이동하고있고, 다른 액터 위에 있을 때 액터의 이동 방향으로 이동하지도 않는다...

이는 레벨을 만들고, 플레이할 때 매우 크리티컬한 오류다... ㅠ

 

때문에 어쨌든 과제에서는 내가 직접 구현한 폰을 보여주어야 하니까.. 디폴트 폰을 저 폰 캐릭터로 해두고, P키를 입력하면 캐릭터를 상속받아 만든 또 다른 플레이어 캐릭터로 전환해주는 방식으로 스테이지를 진행하도록 구현했다.

때문에 이렇게 플레이어를 바꿔치기해 진행하도록 구현했다.

 

자연스럽게 진행하려면.. 트리거 볼륨을 활용해 다리를 진입하기 전에 변경해주도록 하는게 좋았겠지만, 우리는 일단 과제이고, 어떻게보면 시연용으로 프로젝트를 마무리한 느낌이 강하기 때문에 이렇게 직접 버튼을 눌러 변경해주는 것이 더 좋아보였다. (그래야 발표를 하게되더라도, 빗면이 이렇게 안올라가지고 충돌처리를 깔끔히 못 만들었다. 따라서 특정 키를 입력하면, 캐릭터를 상속받아 만든 플레이어 캐릭터로 변경해준다. <- 와 같은 설명을 하기에 용이하니까.)

 

7. 레벨 만들기

처음 만든 레벨은 이런 밀실공간에서 시작해 4방향으로 길이나있고, 각 방은 메인 스테이지, 튜토리얼 3개로 진입하는 길로 만들려했다.

하지만.. 맵 사이즈를 너무 크게 만들어서 문제였고.. 대부분이 이전 플랫포머 게임과 크게 다르지 않아서.. 굳이 이렇게 크게 만드는게 좋을까? 싶었다..

(솔직하게 내일 제출인데, 내일도 여유 시간이 2시간 채 되지 않아서.. 맵 작업을 작게하고 싶은 이유도 있었다..)

 

거기다 6번 항목의 문제를 발견하게 되어서 시간이 더욱 촉박해졌다.. 때문에 맵 크기를 작게만드는 방향으로 틀었다.

 

 

2. 마무리


사실 오늘 대부분의 시간을 드론을 작업하는데 써버려서.. 시간 배분이 문제가 있다고 느꼈다.. ㅠ

그치만 드론 움직임을 어떻게 구현해야 조작감이 좋을지.. 전혀 감이 안잡히는걸.. ;ㅅ; 줸장...

 

그래도 레벨까지는 마무리 했으니까..

 

내일 1~2시간 안에 Grab, 상호 작용들을 추가해 게임을 어느정도 진행할 수 있도록 완성할 수 있을지가 관건이다...

 

일단 늦어져서 어서 자야겠따.. ㅠ 감기.. 힘드러잉...