게임 프로그래밍

개요양보하는 에이전트를 통해 길찾기 도중 에이전트끼리 겹치지 않게 한다.길찾기를 하는 에이전트끼리 겹치지 않게 하기위해 양보하는 방법을 선택하였다.결론만 말하자면 이는 실패한 방법이다. 어떤 아이디어로 개발을 했고, 어째서 실패한 알고리즘이라고 생각하는지 알아보자.설명어떤 알고리즘으로 에이전트의 겹침을 해결했는지 알아보자.길찾기 알고리즘을 통해 나온 결과만으로 에이전트를를 제어하면, 동일한 경로를 가진 에이전트끼리는 겹치게 된다.에이전트들의 경로가 겹치게 되면, 목적지인 하나의 타일위에 여러개의 에이전트끼리 뭉쳐지게 된다.이러한 현상을 회피하고자 필자가 선택한 방법은 ‘하나의 타일엔 하나의 에이전트만 올라갈 수 있다.’라는 전제를 설정하는 것이었다.하나의 타일엔 하나의 에이전트만 올라갈 수 있다타일에 ‘..
개요이동하면서 적을 회피하는 기능을 만들자아이디어원하는 기능은 이동하려는 경로에 장애물이 있을경우 장애물을 회피하며 이동하는 것이다.장애물이 가만히 있을경우엔, 지난 포스팅으로 해결되기 때문에, 장애물이 이동하는 경우를 가정해볼것이다.장애물이 이동중일때 회피하기 위해선 단순하게 장애물이 이동하고자 하는 위치와 가까워지면, 장애물이 이동하고자 하는 위와 반대로 이동하도록 구현을 해볼것이다.구현간단하게 테스트 해봤을땐 꽤 부드럽게 동작하는것으로 보인다.이 영상에서 돌아다니는 노란색의 장애물들은 가고자 하는 목표 위치가 명확하게 존재한다. 따라서 이동중에 장애물을 마주하면 잠시 피했다가 다시 자신이 가고자 하는 목표 위치로 이동한다.아직까지는 꽤나 괜찮게 움직이는것같다.문제점하지만 장애물이 명확한 목표없이 앞..
개요조종행동을 이용해서 장애물을 회피하는 AI를 만들자.지난번에 설명한 조종행동의 구조와 더불어 적을 회피하는 AI를 만들어보자.아이디어원하는 구현은 가만히 대기하고 있을경우, 아군이 지나가면 길을 비켜주고 적군이 지나가면 길을 막는다. 이동하고 있을 경우, 아군이나 적군이 지나가면 길을 지나친다. 길이 좁을경우엔 아군끼리는 조금 겹칠 수 있지만, 적군과 겹칠수는 없다.우선 대기하고 있을때 에이전트가 지나가면 길을 비켜주는 기능을 만들어보자.구현대기하고 있으며, 주변에 다른 유닛이 지나가면 비켜주는 행동을 만들어보자.비켜주기비켜주기의 아이디어는 간단하게 작성해보았다.주변에 다른 에이전트가 지나가면 그 에이전트로부터 피하는 방향으로 이동하는 힘을 주는것이다.초록색 원이 비켜주는 행동을 하는 에이전트이고, ..
개요조종행동을 이용해서 자연스럽게 동작하는 AI를 만들자.사이드 프로젝트인 EternalSmash를 제작하면서 적을향해 움직이는 AI가 필요했다.이동하다가 이동 경로에 장애물이 생기면 회피를 해야하는데, 자연스럽게 회피하는 것을 구현하기가 어려웠다.이 부분을 조종행동으로 해결할 수 있겠다는 생각이 들어서 직접 구현하게 되었다.조종행동조종행동은 어떠한 목표를 이루기 위해 주변 환경을 감지하여 상황에 맞는 행동들을 수행하여 목표를 이루는 자동적 에이전트를 만드는 방법이다.적을 따라가거나, 피하거나, 목표에 도착하는 등 여러 행동들을 상황에 맞게 조합해야한다.목표를 향해 이동하다가 적을 마주하면 회피하면서 주변 무리들로부터 너무 멀어지지 않게끔 조절해야한다.위의 내용을 구현하기 위해선 주변 환경을 감지하여 자..
Enhanced Input이란기존에 사용하던 입력 시스템은 초기화 단계에서 어떤 입력이 어떤 키가 어떤 함수와 연결할지 설정하는 방식이었다. 이런 방식은 게임 초기에 바인딩을 하기 때문에 런타임 중에 키보드에서 게임패드로 입력 시스템이 바뀌는 것처럼 매핑이 변경되어야 할 때 수정이 어렵다는 문제가 있다.Enhanced Input은 기존에 있던 입력시스템의 그런 문제를 해결하기 위해 등장한 새로운 입력 시스템이다.Enhanced Input은 크게 두 가지 오브젝트로 나눌 수 있다.입력 액션입력 매핑 컨텍스트입력 액션입력 액션은 특정 키와 연결될 오브젝트이다. 기존 입력 방식에서는 키와 함수가 매핑되었지만, Enhanced Input System에서는 키와 입력 액션이 매핑되고, 입력 액션에 함수가 바인딩된..
개요에이스타 알고리즘과 JPS 알고리즘의 상황별 성능차이를 알아보자테스트 조건가로 세로 100x100, 200x200 타일에 장애물을 랜덤 한 위치에 설치한다.각 길찾기 알고리즘으로 경로를 탐색한다.경로 탐색에 성공한 경우 발생한 시간을 모두 더하고 경로 탐색을 한 수만큼 나눠 평균 속도를 계산한다.테스트 기기 : 맥북 M1 Air 기본형테스트 횟수는 기기의 한계로 인해 각각 1000번, 100번 수행했다.100x100 타일에서의 테스트(1000번 테스트)장애물의 수에이스타 알고리즘JPS 알고리즘100개8ms1ms500개26ms1ms1000개41ms2ms2000개63ms2ms 에이스타 알고리즘은 장애물의 수가 증가하는 만큼 눈에 띄게 비례하여 상승하였지만, JPS 알고리즘은 장애물의 개수가 증가하여도 ..
개요에이스타 알고리즘을 확장한 길 찾기 알고리즘인 JPS 알고리즘에 대해 알아보자.JPS 알고리즘이란?출발 지점부터 목표지점까지 탐색 과정 중간중간에 포인트를 찍어가며 경로를 찾아내는 알고리즘이다.에이스타 알고리즘을 확장한 알고리즘으로, 성능이 상대적으로 뛰어나다.구현JPS의 구성JPS 알고리즘은 어떻게 구성되어 있는지 알아보자JPS 알고리즘은 에이스타와 길을 찾아내는 방법에서 차이가 있을 뿐이지, 노드의 구성과 일부 규칙은 에이스타와 동일하다. 따라서 이해를 위해선 에이스타 알고리즘을 먼저 이해하고 오길 바란다.JPS 알고리즘의 길찾기 수행JPS 알고리즘이 어떤 과정을 통해 길을 찾아내는지 알아보자JPS 알고리즘이 길을 찾아가는 방식은 체스 게임 속 퀸의 이동방식을 예시로 들어 설명할 수 있다.퀸은 상..
개요길 찾기길 찾기 알고리즘 중 하나인 Astar 알고리즘에 대해 알아보자.에이스타 알고리즘이란?출발 지점부터 목표지점까지 주변을 점진적으로 탐색하며 경로를 찾아내는 알고리즘이다.다익스트라 알고리즘을 확장한 알고리즘으로, 노드에서부터 목표까지의 거리값인 휴리스틱 추정값(H)이 존재한다는 차이점이 있다.장애물이 고정되어 변화하지 않는다는 전제조건이 있을 때 사용하기 좋으며, 구현이 간단해 여러 형태로 변형하여 구현할 수 있다는 장점이 있다.구현에이스타의 구성에이스타가 어떻게 구성되어 있는지 알아보자에이스타 알고리즘의 이해를 돕기 위해 사각타일의 격자무늬에서 길 찾기를 한다고 가정해 보자.하나의 사각타일을 '노드'라고 부를 것이며, 각 노드는 G값, H값, F값을 가지고 있다.G값은 시작지점부터 현재 노드까..
라일라엘
'게임 프로그래밍' 카테고리의 글 목록