부드러운 방식으로 길을 따라


9

나는 현재 적들이 따라가는 정적 인 미리 정해진 차선으로 2D 타워 방어 게임을 만들고 있습니다 (즉, 타워가 경로를 막을 수 없으며 경로 찾기가 해결하려는 문제 가 아닙니다 ).

유닛이 어떻게이 차선을 순조롭게 따르게 하는지를 정확히 파악하려고합니다 . 이 작업을 수행하는 방법에 대한 두 가지 대략적인 아이디어가 있지만 구현하기 쉽고 표준 기술이 더 쉬운 입력을 원합니다. 또는 내가 전혀 고려하지 않은 완전히 다른 방법이 있다면 그것에 대해서도 배우고 싶습니다.

웨이 포인트 : 첫 번째 아이디어는 경로를 일련의 하드 코딩 된 웨이 포인트로 정의하는 것이 었습니다. 단위는 (예 : 기본 "추구"스티어링 알고리즘을 사용하는 것이 연속 경로를 따라 각 웨이 포인트로 이동 한). 그러나 나는 그들이 따라 오길 원하는 차선에서 유닛이 많이 벗어나는 것을 어려워하는지 궁금했습니다. 나는 충분히 급하게 돌지 못하는 것이 그들이 원하는 차선에서 일종의 "글라이드"를 일으킬 수 있는지 궁금합니다. 나는 상대적으로 강한 조향력을가함으로써 그것을 막을 수 있다고 생각합니까?

베 지어 곡선 : 내가 생각한 두 번째 해결책은 베 지어 곡선으로 경로를 정의하고 각 시간 단계에서 단위의 현재 위치에서 (dt * 속도) 떨어진 곡선을 따라 점을 계산하는 것입니다. 이 기술을 사용하면 유닛이 따라갈 경로를 정확하게 정의하는 것이 훨씬 쉬워 질 것 같지만 정확히 구현하는 방법을 모르겠습니다. 어떤 제안?

또한, 나는 이것이 누군가의 대답을 바꾸지 않을 것이지만, 유닛은 경로를 따라 일정한 속도로 이동할 수 있어야합니다. 또한 pyglet 프레임 워크를 사용 하여이 게임을 파이썬으로 프로그래밍하고 있습니다.

궁금한 점이 있으면 알려주세요.

편집 : 또한 그 가치가 무엇이든, 나는 Kingdom Rush 에서 적의 움직임 행동을 모방하려고합니다 .


관련 : gamasutra.com/view/feature/131505/… 타일을 기준으로 어떤 종류의 단위 밀도 / 크기를 사용하고 있습니까?
monkey

그 기사를 살펴 볼게요! 실제로 타일을 사용하지 않고 위치를 지정하기 위해 연속 좌표 만 사용합니다. 플레이어가 유닛을 움직일 위치를 나타내는 정적 배경 이미지가 있습니다.
Pwnosaurus 2019

나도 찾았 어 gamedev.stackexchange.com/questions/26543/… A *는 비 그리드 맵에서 작동합니다. 비슷한 방식으로 구부러지는 왕국의 노드 경로 일 수 있습니다.
monkey

적들이 길 을 떠나 경로로 돌아올 수있는 것이 있습니까? Bezier-curve 제안서에 제안되어 있지 않기 때문에 묻습니다.이 경우 전체 경로에 대한 임의의 데이터를 사전 계산할 수없고 "AI"논리가 필요하지 않습니다.
Kevin Reid

답변:


8

자율적 인 캐릭터 를위한 조종 행동에 관한 크레이그 레이놀즈의 유명한 논문을 소개하겠습니다 . 읽지 않았다면, 이런 종류의 문제를 생각하는 데 도움이 될 것입니다. 특히 길 찾기 섹션을 살펴보십시오 .

여기에 이미지 설명을 입력하십시오

레이놀즈 논문의 아이디어는 단순한 힘을 사용하여 환경을 생생하고 즉흥적으로 탐색 할 수 있다는 것입니다. 움직임은 경로 계획 또는 전역 계산을 기반으로하지 않지만, 이웃 힘과 같은 지역 정보를 사용하여 이해하고 구현하기는 쉽지만 여전히 매우 복잡한 움직임 패턴을 생성합니다.

이 접근 방식의 장점은 몇 가지 동작을 결합 할 수 있다는 것입니다. 예를 들어 캐릭터에 경로 찾기 동작과 분리 동작 (너무 많이 쌓이지 않도록하기위한)이있을 수 있으며 이는 가중치 합계로 결합 될 수 있습니다.

조정 동작을 사용하는 또 다른 이점은 다양한 언어 (예 : opensteer ) 로 다수의 기존 오픈 소스 구현이 있다는 것입니다 .


업데이트 : Kingdom Rush를 살펴본 결과 "부드럽게"라는 의미를 잘못 이해했을 수도 있습니다. 좀 더 생생한 느낌을 주었지만, 당신이 쫓는 것은 캐릭터가 기차 트랙에있는 것과 비슷하다고 생각합니다. 또한 더 자세히 읽어 보면 요구 사항 중 하나는 "유닛이 경로를 따라 일정한 속도로 이동할 수 있어야한다는 것"입니다. 조향 동작은 일정한 이동 속도를 제공하지 않지만 웨이 포인트와 결합 된 간단한 길 찾기가 가능합니다. (즉, "검색"동작을 사용하여 웨이 포인트로 이동하지 말고, 방향 벡터를 결정하고 장치가 해당 웨이 포인트로 최고 속도로 이동하도록하십시오.) 더 많은 웨이 포인트를 사용하여 경로를 부드럽게합니다.


2

이 Gamasutra 기사의 해결책은 당신이 찾고있는 것일 수 있습니다. 기본 아이디어는 현재 웨이 포인트보다 2 단계 앞선 웨이 포인트에 광선을 캐스트하는 것입니다. 광선을 셀 길이의 일부로 "스테핑"하고 광선의 각 "스테핑"에서 플레이어의 충돌 볼륨이 어떤 것과 충돌하는지 확인합니다. 광선의 계단식 위치에서. 광선이 2 단계 앞쪽에있는 중간 지점까지 도달하면 중간 중간 지점을 제거 할 수 있습니다. 그런 다음 동일한 목표를 "목표"웨이 포인트까지 계속 진행할 수 있습니다. 따라서 목표에 대한 직선으로 경로를 달성 할 수 있다면 목표에 대한 직선은 캐릭터가 취할 경로입니다. 여기 기사가 있습니다 : http://www.gamasutra.com/view/feature/131505/toward_more_realistic_pathfinding.

또한 회전 반경과 더 자연스러운 회전 동작 등에 대한 훌륭한 정보를 제공합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.