질식 지점에서 군중을 다루기위한 전략


9

최근에는 적절한 시간 기반 충돌 해결을 통해 조향 동작에서 임펄스 기반 이동으로 게임 엔진을 전환했습니다. 이것은 너무 많은 문제를 해결하고 (더 이상 터널링, 예) 시뮬레이션을 훨씬 더 안정적으로 만들었습니다. 그러나 안정성과 함께 새로운 문제가 발생했습니다.

출입구 충돌 문제.

3 개의 공은 이미지의 바닥 근처에서 여행을 시작했고, 목표는 분홍색 공이 멈추는 곳이었습니다. 도중에 빨간색과 초록색 공이 벽의 질식 지점에 달라 붙었습니다.

전에는 부동 소수점 오류와 조타 동작의 일반적인 불안정성에 의존하여 녹색과 빨간색 공이 질식 지점을 통과 할 때까지 서로 흔들 리게 만들 수있었습니다. 이제 적절한 충돌 해결로 볼에 작용하는 힘이 서로 상쇄되어 볼이 완벽하게 정지 된 상태로 유지됩니다.

그러한 상황을 해결하기 위해 일반적으로 사용되는 방법은 무엇입니까? 우선 순위 큐 시스템이 작동 할 수도 있지만, 2 개 이상의 개체간에 우선 순위를 결정해야하는 경우에는 복잡해 짐을 알 수 있습니다.


또한 조종 군중 관리에 실망했습니다. 질문에 "임펄스 기반 이동"에 대한 링크를 추가해 주시겠습니까?
Kromster

충동은 힘 * 시간입니다. 내가 말하려는 것은 불연속 충돌 감지보다는 연속을 사용하여 물리 기반 모델로 옮겼다는 것입니다. 스티어링 행동은 뉴턴의 운동 법칙과 같은 것을 실제로 존중하지 않으며, 물리 시뮬레이션이 아닌 새 떼를 모방하도록 설계되었습니다. 나는 운동에 대한 gamedev 링크가 실제로 없으며, 단지 고등학교 물리학입니다. 그러나 Christer Ericson의 저서 인 Real Time Collision Detection은 연속적인 충돌 감지를위한 게임 개발 도구입니다.
Fibbles

답변:


3

각 이동 가능한 개체에 고유 한 인덱스를 할당하고 인덱스가 높은 개체가 인덱스가 낮은 에이전트를 이동하지 못하도록합니다. 이렇게하면 '더 오래된'개체가 '새로운'개체를 조금씩 움직일 수 있지만 그 반대의 경우는 아니며 대기열보다 오버 헤드가 적습니다. 기본적으로 인덱스는 이동 우선 순위로 작동합니다.


1
나는 이것을 구현했으며 그것이 항상 예쁘지는 않다고 말해야하지만 더 이상 장치가 멈추지 않는 곳에서 작동합니다. 주의 사항 : 동일한 질량의 물체를 움직이는 데 우선 순위를 정하기 위해 색인 만 사용하십시오. 큰 물체는 작은 물체를 자연스럽게 밀어 내야합니다. 동일한 팀의 오브젝트에 대한 우선 순위를 판별하려면 인덱스 만 사용하십시오. 적 오브젝트는 처음 스폰되어 우선 순위가 높기 때문에 플레이어 오브젝트에 고정 벽 역할을 할 수 없어야합니다.
Fibbles

나는 질량이나 팀을 고려하지 않았다; 당신의 조정은 내 대답을 패치하는 논리적 인 방법처럼 보입니다.
Pikalek

2

경로 찾기에 시간 추가

다음은 해당 시간 큐브에 대해 설명하는 논문입니다. http://www0.cs.ucl.ac.uk/staff/D.Silver/web/Applications_files/coop-path-AIWisdom.pdf

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

Objective-C 구현은 다음과 같습니다. http://allseeing-i.com/ASIPathFinder

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


1
전에 이것을 읽고 구현했습니다. 여러 스레드가 있어도 내 상황에서는별로 사용되지 않습니다. RTS 게임에는 한 변에 500 제곱보다 큰 수백 개의 이동 유닛과 맵 그리드가있을 수 있습니다. 각 장치의 시간 기반 경로를 계산하는 오버 헤드가 너무 높습니다. 덧붙여서, 나는 rakkarage의 대답이 잘못되었다고 말하는 것이 아니라 매우 깔끔한 알고리즘입니다. 나는 그것이 유용한 상황이 복잡성에 의해 제한된다고 말하고 있습니다.
Fibbles

나중에 나는 완전히 이해하고 이것을 구현하는 대신 매 턴마다 전체 경로 찾기 알고리즘을 다시 실행하지만 결국해야 할 수도 있다고 생각합니다.
Rakka Rage

0

실제로, 나는 당신이 그것을 고쳐야한다고 생각하지 않습니다. 화살표가 그리드의 어느 위치에서나 (구체적으로 "양 선형"또는 같은 방식으로 보간되거나 0/1 인 것보다 더 많은 "아날로그"로 보간 된) 모든 구에 적용된 힘 벡터를 나타내는 경우에는 행동은 육체적으로 정확하며 잘 행동하는 솔루션을 갖게 된 것을 축하해야합니다.

두 구체는 서로 앉아서 미워하기 때문에 균형이 잘 맞습니다. 분명히, 그들이 조금 오른쪽으로 움직이면, 오른쪽의 "강제 화살표"는 오른쪽 구체에 약간 더 영향을 미치며 (그 반대도 왼쪽 구체에, 조금 덜 영향을 미침) 다시 균형으로 돌아갑니다. 이렇게해야합니다.

Imho, 고정 해야 할 것은 벽, 구체 크기 또는 그 자체가 묘비들 중 다른 것입니다. 당신은 불가능을 만들었고 그 상황에서의 올바른 행동은 교착 상태입니다 (오용하는 단어가 유감입니다. 어쨌든 :-)).

아마도 가장 가까운 왼쪽 / 오른쪽 힘 화살표를 비활성화하거나 대칭이 아니고 균형을 유지하지 않는 다른 방법으로 정렬하십시오 .

인위적으로 수정하는 것은 나쁜 수정일 것이라고 생각합니다. 너무 일찍 털이 나올 것입니다.


이것은 질문에 대답하지 않습니다. 나는 당신의 동기를 이해하지만 궁극적으로 문제는 상황을 처리하는 방법입니다. 우리는 게임 플레이 의도를 모르기 때문에 이것이 문제인지 아닌지 판단하는 것은 Fibbles에 달려 있습니다. 벽을 변경하면 초크 포인트의 목적이 변경 될 수 있습니다. 문제는 해결 될 수있는 유효한 문제입니다.
Felsir

내 대답은 기본적으로 : 시나리오에서 힘을 다시 정렬하거나 다른 것을 다시 정렬하지만 물리 솔버를 뒤섞 지 않습니다 ( " 마십시오. 자신. "). 문제는 " 이러한 상황을 해결하기 위해 일반적으로 사용되는 방법무엇입니까 ?"입니다. 내 A는 매우 일반적으로 사용되는 방법이며 문제에 대한 해결책이라고 생각합니다. 예를 들어, 온라인 미니 골프 게임 (Q가 매우 많이 생각 나게하는)은 환경이 그것을 요구할 경우 공을 질식시킵니다. 불규칙한 물리학은 나쁜 방법입니다.
Stormwind

물리 솔버는 그대로 유지해야한다는 데 동의합니다. 이 질문은 구체가 기본적으로 에이전트의 동작을 변경하는 방법 (물리 또는 레벨 레이아웃이 아님)을 대상으로 찾아야한다고 말합니다. 레벨 레이아웃을 변경하면이 문제를 해결할 수 있지만 다른 레이아웃에서 잘릴 수 있습니다. 따라서이 예에서는 교착 상태를 피해야하기 때문에 질문은 제공하는 미니 골프 예제와 다릅니다.
Felsir

보시다시피, 나는 대답에 힘을 재정렬 할 것을 제안합니다. 그 뒤에 약간 남은 것 같습니다 :-).
Stormwind

벽을 재정렬하거나 구 크기를 변경하는 것은 다른 경우에도 가능하지만 실제로는 불가능합니다. 스크린 샷은 RTS 엔진의 디버그 모드에서 가져온 것입니다. 다양한 크기의 유닛이 있으며 플레이어가 벽을 자유롭게 배치 할 수 있습니다. 표시되는 화살표는 빠른 흐름 필드 알고리즘에 의해 생성됩니다. 이들은 이동 가능한 유닛의 이동 방향에 영향을주는 데 사용되는 정규화 된 벡터입니다. 그룹의 모든 이동 가능한 단위가 동일한 흐름 필드를 공유하기 때문에 벡터의 길이를 변경할 수 없습니다.
Fibbles
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.