0. 개요
오늘은 확실히 성과가 있었다..!! 진짜 진짜 생각보다 시간이 걸리긴했지만 만족스러운 결과가 나와서 다행이었다..
오늘도 어제와 동일하게.. 드론 AI를 구현하고, 새벽에는 레벨 디자인을 어떻게 할지 회의를 했다.
레벨 디자인은 이쁘게 꾸미자 이런것은 아니었고, 어떤 레벨의 어떤 지역에서는 어떤 기능들을 사용하도록 구성하고, 어떤 흐름으로 진행되도록 할까에 대해 대화를 나눴다.
함께 대화 하면서 진행사항을 공유하고, 작업하고, 회의를 진행했던 이 과정들이 너무나도 즐거운 시간이었다. ㅎㅎ >ㅅ< b
우선 팀프로젝트를 진행을 어디까지 했는지에 대해서 정리하고.. 회의 내용은 따로 기록하지 않고, 팀 노션에 정리해 두려한다.
1. 드론 AI 만들기
1. 드론 이동시 장애물 회피 구현
어제 생각해봤던 몇 가지 방법들을 시도해 제일 괜찮은 결과를 얻은 Octree와 A* 방법을 사용했다.
< LineTrace로 시도하기 >
가장 먼저 생각났던 방법은 영상처럼 LineTrace를 시도해 장애물을 만나면 장애물을 회피해 이동할 경로를 찾는다.
처음에는 잘 동작하는 것처럼 보였고, 비용적으로도 괜찮았다.
다만 문제는 회피하는 힘을 적게 주면, 장애물을 온전히 우회하지 못하고 낑기는 현상이 발생하고.. 회피하는 힘을 크게 주면 장애물을 너무 많이 우회해 좁은 골목은 지나가지 못하는 문제가 발생한다.
이를 해결하려고 여러 시도를 했지만, 시간이 너무 오래걸려.. 차라리 다른 방법을 사용해보자는 생각을 하게 되었다.
음.. 지금와서 드는 생각은.. 해당 방법에서 힘을 동일값이 아니라 조건을 세워서 동적으로 주면.. 가능하지 않을까 하는 생각이 든다.
문제는.. 힘의 세기를 결정하는 조건을 어느걸 주는게 맞는지가 감이 안온다… ㅠ
( 괜히 PID 컨트롤 같은걸 넣은것 같다… )
< Octree를 이용한 A* 길찾기 >
다음으로 생각했었던 Octree를 이용한 방식을 시도해 보았다.
어제도 자기 전에 Octree에 관련된 영상을 봤는데.. 영상 내용은 Octree는 동적인 대상에 대해서는 아쉬운 점이 많다. 였던 것 같다.
이유는 큐브의 정중앙을 기준으로 하는데, 위와 같이 서로 겹치지 않는 큐브들이기 때문이다.. 음.. 이번에 해보니 도착지점을 동적으로 이동하는데, 위의 Octree와 맞지 않는 부분이 있어서 에러가 많이 발생했다..
⇒ 정확히는 물체가 존재해 갈 수 없는 셀임에도 계속 길찾기를 시도한다거나 하는 등이었다.
( Octree에 대한 공부를 더 해봐야할 것 같다.. )
사실 단순히 큐브 하나를 기준으로 작은 큐브 8개로 쪼개면서 그것을 트리 형태로 나타낸 것이 전부인 듯 하다.
대신 노드들의 수나 방향에대한 고려 사항이 쿼드 트리보다 늘어난 만큼.. 나는 머리가 아팠다.. ㅠㅠ
( 수학을 잘 못하는데, 수학도 확실히 공부를 해야할 것 같다. )
때문에 Octree를 만드는것은 다른 플러그인 코드를 보고 만들었다..
위에서 만들었던 Octree와 A*를 이용해 장애물을 만나면, 드론이 길을 찾아오도록 구현했다.
원래는 Theta를 사용해 볼까했는데.. 우선적으로 A를 적용했을 때, 기존 움직임 함수들을 사용하니 자연스럽게 이동해서 A*를 그대로 사용하도록 했다.
다만 위에서 다음 지점들이 가까워서 드론이 탐색한 길을 따라 이동하는 속도가 너무 느려서 길을 찾고나서 이동할때는 가속도를 더 크게 주도록 수정해 원래 이동속도와 비슷하게 이동하도록 만들었다..!
문제사항 발생!!!!!! 삐용삐용!!
최종 도착 지점이 갈 수 없는 Octree의 Node라면, 계속 길 찾기를 시도해 프레임이 떨어진다.. ( ; w ; )
해결할 방법이..
- 타이머를 이용해 딜레이를 주어 호출 한다.
- A*를 진행할 때, 최종 도착지점을 검사해 주변에 열린 공간이있다면 거기로 도착지점을 바꿔준다.
- ㅇㅁㅇ! 더 간단하게 수정하려면 도착지점을 검사해 bool값을 반환 받아 주면 괜찮겠다.
때문에 도착지점이 유효한지를 검사하고, 유효하지 않다면 탐색을 진행하지 않는다.
또한, 3초라는 딜레이를 주어 플레이어가 움직여 도착지점이 유효해지면 그때 길찾기를 해주도록 구현했다.
그 결과 자연스럽게 플레이어를 따라다니는 귀여운 드론이를 만들 수 있었다..!!!
( ;ㅅ; 진짜 여기까지 오는데 너무 힘들었다아아.. ㅠ )
< 코드 이식하기 >
혹시나 싶어서 프로젝트를 복사해서 해당 복사된 프로젝트해서 작업해 왔었다.
이제 기능 하나가 완성이 되었기 때문에 원래 프로젝트에 옮겨줄 것이다.
이후 Push와 Marge까지 진행했다.
최종! 수정본 영상!
2. 마무리
으아아.. 오늘은 마무리를 조금 빨리하고, 일찍 자고 내일 Idle부터 해서... AI 완성까지 해야겠다..
AI중에서는 가장 큰 산은 넘은 느낌이었다.
휴.. 아쟈 화이팅!
'프로그래밍 > Unreal 부트캠프' 카테고리의 다른 글
TIL 2025.02.25 기록 (0) | 2025.02.25 |
---|---|
TIL 2025.02.24 기록 (0) | 2025.02.24 |
TIL 2025.02.20 기록 (0) | 2025.02.20 |
TIL 2025.02.19 기록 (2) | 2025.02.19 |
TIL 2025.02.18 기록 (0) | 2025.02.18 |