개요
이동하면서 적을 회피하는 기능을 만들자
아이디어
원하는 기능은 이동하려는 경로에 장애물이 있을경우 장애물을 회피하며 이동하는 것이다.
장애물이 가만히 있을경우엔, 지난 포스팅으로 해결되기 때문에, 장애물이 이동하는 경우를 가정해볼것이다.
장애물이 이동중일때 회피하기 위해선 단순하게 장애물이 이동하고자 하는 위치와 가까워지면, 장애물이 이동하고자 하는 위와 반대로 이동하도록 구현을 해볼것이다.
구현
간단하게 테스트 해봤을땐 꽤 부드럽게 동작하는것으로 보인다.
이 영상에서 돌아다니는 노란색의 장애물들은 가고자 하는 목표 위치가 명확하게 존재한다. 따라서 이동중에 장애물을 마주하면 잠시 피했다가 다시 자신이 가고자 하는 목표 위치로 이동한다.
아직까지는 꽤나 괜찮게 움직이는것같다.
문제점
하지만 장애물이 명확한 목표없이 앞으로만 움직이도록 세팅했을때 문제가 생겼다.
이 영상에서 돌아다니는 노란색의 장애물은 앞으로만 이동하며, 장애물을 마주하면 회피하고 회피한 방향으로 쭉 이동한다. 이때 장애물과 조작중인 AI가 회피할때 잠시 버벅이면서 움직이는 모습을 보인다.
문제의 원인
장애물이 이동하고자 하는 목표지점에서 멀어지는 방향으로 급격하게 꺾이는 것이 문제인것같다. 장애물로부터 회피하려는 힘의 우선순위가 너무 높은 나머지, 내가 이동중인 방향과 상관없이 방향을 전환하는게 어색하게 보이는거같다.
해결
장애물이 이동하려는 방향에서 벗어나는 방향으로 무조건 움직이는것이 아닌, 내가 이동중인 방향에서 회피하는 방향으로 도망치는 힘을 더하는 방식으로 수정했다.
이렇게 되면 장애물과 닿거나 조금 겹치게 되는 경우가 발생할수도 있다. 하지만 도망치려는 힘에서 목표지점으로 이동하려는 힘을 어느정도 가중치를 주어 이동시킬것인지 잘 설정해놓으면 겹치는 현상이 줄어든다.
위와 같은 방식으로 구현해봤을때 어떻게 동작하는지 확인해보자.
확실히 이전 영상과 비교했을때, 방향이 급격하게 틀어지면서 어색하게 보이는 현상이 사라졌다. 대신 회피하면서 가끔씩 겹치는 모습이 보이고는 있다.
마치며
이번에 조종행동을 만들어보면서 많은것을 느낄 수 있었다. 우선 생각보다 코드가 복잡하고 자칫 무거워질 수 있겠다는 생각이 들었다.
주변 장애물을 감지하고 회피하는 과정에서 연산이 생각보다 무거웠고, 수학적 지식이 부족해거 이걸 최적화할 방법이 떠오르지 않았다.
그리고 어떤 움직임을 취할것인지에 대한 기획이 중요하다고 생각되었다. 내가 원하는 움직임이 무엇인지, 이 순간에는 어떻게 움직이는것이 맞는지에 대한 명확한 기획없이 만들다보니, 동작을 보면서 ‘어색한데?’라는 생각이 들면 어떻게 움직여야 하는게 맞는것인지 생각해보고 수정하는 과정을 반복했다. 그러다보니 수정하고 난게 더 어색해보이는 순간도 종종 있었다.
이번에 한 조종행동은 가볍게 맛보기만 해볼 목적으로 만든것이기 때문에 여기까지 진행해보려고한다.
나중에 기회가 된다면 지금 프로젝트를 좀더 업그레이드해서 다시 만들어볼 생각이다.
'게임 프로그래밍 > 게임 AI' 카테고리의 다른 글
[게임 AI] 양보하는 에이전트 만들기 (0) | 2025.02.01 |
---|---|
[게임 AI] 조종행동(SteeringBehavior) 2 (0) | 2025.02.01 |
[게임 AI] 조종행동(SteeringBehavior) 1 (0) | 2025.02.01 |
[게임 AI] A* 알고리즘 vs JPS 알고리즘 성능 비교 (0) | 2024.08.01 |
[게임 AI] JPS(Jump Point Search) 알고리즘 (0) | 2024.07.23 |