레이싱 게임의 드라이버 AI 스티어링 휠, 0.0의 브레이크”와 같은 명령으로

레이싱 게임에서 자동차를 어떻게 제어 할 수 있는지 궁금합니다.

AI 에이전트가 “0.35의 스로틀, 0.5의 스티어링 휠, 0.0의 브레이크”와 같은 명령으로 자동차를 제어해야합니까? 아니면 차를 고수하는 곡선을 미리 계산해야합니까? 전륜 회전과 같은 시각적 요소는 모든 것이 일관되게 보이도록해야합니까? 아니면 다른 방법이 있습니까?



답변

우리는 어느 수준에서 게임이 미리 계산 된 경로를 따르고 있다고 말할 수 있습니다. 레이싱 게임의 트랙은 (보통) 미리 계산 된 경로이기 때문에 어쨌든.

우리가 무작위로 트랙을 생성하는 것에 대해 이야기하더라도, 게임은 자동차가 도착하는 순간 트랙의 현재 부분을 계산해야합니다.

글쎄, 그것은 쉬웠다. 그것에 대해 다른 것이 있습니까?

미리 계산 된 경로를 따르고 자동차를 체계적으로 제어하는 ​​것은 게임 산업에서 사용됩니다. 답은 두 가지를 모두 사용하는 것입니다.

먼저, “곡선 계산”은 두 가지를 의미 할 수 있습니다.

  • 커브에서 위치를 출력하고 함수를 쿼리 할 거리를 매개 변수로 사용하는 함수 작성.

  • 따라야 할 포인트 목록 (또는 명령 및 기타 제어 정보)으로 이해되는 경로를 만듭니다.

전자는 예측 또는 일부 물리 시뮬레이션에 유용 할 수 있습니다. 그러나 객체 제어에 대해 이야기 할 때는 후자가 권장되는 접근 방식입니다.

참고 : 오래된 게임 (1980 년대)의 경우 다른 장애물은 움직이는 장애물과 같습니다. 그들은 당신이 그들을 피하고 능가하기 위해 거기에있었습니다. 우리는 그것에 대해 이야기하지 않습니다.


  • 미리 계산 된 경로를 따르는 경우 : 영화 또는 반복 가능한 장면에 유용합니다. 예를 들어 GTA San Andreas에서 체이스 임무는 체이스 대상과 모든 차량이 사전 정의 된 경로를 따릅니다 (체이스 대상이 교통 체증을 피할 수 있도록합니다 ※). 그러나, 당신이 그들을 방해하자마자 그들은 AI 제어로 넘어갑니다.이 경우 AI는 규칙적인 경로를 따라가는 곳으로 가려면 경로를 찾아야합니다.

    ※ : 실제로 미리 녹음되었습니다. 기록 및 재생은 GTA SA 게임 엔진의 새로운 기능 중 하나였습니다.

  • AI로 제어 :

    가장 간단한 형태의 AI는 상태 머신입니다. 상태를 확인하고 그에 따라 몇 가지 작업을 실행합니다. 나는 이러한 상태와 행동의 조합을 행동으로 언급 할 것입니다. 액션이 플레이어의 게임 패드와 일치 할 필요는 없습니다. 행동도 마찬가지입니다.

    간단한 게임의 경우 두 가지 주목할만한 동작이 필요할 것입니다.

    이 단계에서는 경로 (트랙)를 따르는 것이 멀지 않습니다. 그러나 선로가 실제로 선이 아니기 때문에 경로를 따라가는 것이 아니라 다른 차나 장애물을 피하면서 가까이 접근하는 것입니다. AI가 “조향, 제동 및 가속”을 해결해야 함을 의미합니다.

    현대 게임의 경우 자동차는 물리 시뮬레이션 (충돌을 해결하고 현실감을 유지하기 위해)을받습니다. 그로 인해, 게임 루프의 각 반복은 속도와 가속에 따라 자동차가 업데이트되며, 현재의 행동을 따르기 위해 “조향, 제동 및 가속”(속도로 조정)이 적용됩니다.

    또한 현대 게임에는 더 복잡한 행동이있을 수 있습니다. 예를 들어 AI가 다른 차를 치거나 길을 막을 수 있습니다. 실제로 AI는 어떤 형태의 머신 러닝을 기반으로 어떤 것을 적용 할지를 선택할 수도 있지만, 나는 틀립니다.

    마지막으로, 플레이어가 볼 수없는 AI 자동차를보다 간단하게 제어하는 ​​것이 유용 할 수도 있습니다. 퍼포먼스 또는 고무 밴딩 (이 경우 AI 차량을 플레이어와 가깝게 유지하여 경기를 흥미롭게 유지함)는 상대방을 실제로 떠날 수 없을 때 AI 속임수로 간주 될 수 있습니다.


애니메이션에 대해서는 일반적으로 바퀴의 물리를 독립적으로 시뮬레이션하는 것은 좋지 않습니다. 그렇게하면 게임에 사실감을 더할 수 있지만 성능이 저하됩니다. 일반적으로 게임은 바퀴의 움직임 측면에서 동작을 표현하고 결과를 시뮬레이션하는 대신 동작을 기반으로 바퀴에 애니메이션을 적용합니다.

물론 바퀴가지면에 닿아 있는지 여부에 관계없이 추가로 고려해야 할 수도 있습니다. 그리고 아마도 서스펜션 애니메이션.


답변

자동차 컨트롤러에서 자동차 물리 / 상태 모델을 분리하고 AI 에이전트와 플레이어 컨트롤러를 두 가지 종류의 상호 교환 가능한 컨트롤러로 만들 것을 강력히 권장합니다.

이것은 많은 좋은 효과가 있습니다 :

  • 플레이어와 AI 모두 물리 / 상태 모델을 한 번 구현하고 디버깅 할 수 있습니다
  • 물리 / 상태 모델의 모든 새로운 기능은 플레이어와 AI 모두에 즉시 적용됩니다
  • 플레이어와 AI 자동차는 트랙에서 일관되게 작동하여 인식되고 실제적인 공정성을 높입니다 (레이서를 핸디캡으로 사용하려는 경우 자동차의 매개 변수를 변경하여 수행 할 수 있음)
  • 다양한 종류의 멀티 플레이어 지원을 훨씬 쉽게 개발할 수 있습니다.

그건 그렇고 MVC 분리 의 특별한 경우입니다 .


답변