견인력을 잃을 수있는 자동차의 차량 물리학을 만들려면 어떻게해야합니까? 운전자가 발이 평평한 것처럼 보이기를 원하므로 가스를 누를 때 자동차의 뒷 바퀴가 느슨하게 견인되어 제어하기가 다소 어려워집니다. 나는 또한 도넛과 구석 구석에 “드리프트”를 할 수 있기를 원합니다.
또한 “미끄럼 방지”가 얼마나 발생하는지 알아야하므로 비례량의 연기 및 타이어 자국을 추가 할 수 있습니다.
2D, 하향식 자동차 게임을 가정하십시오.
감사
답변
이것은 매우 단순화 된 버전이지만 대부분의 아케이드 유형 게임에는 적합합니다. 다음과 같은 속성이 필요합니다.
positionX, positionY - where the car is
velocityX, velocityY - speed on each axis
drag - how fast the car slows down
angle - the rotation of the car, in radians
angularVelocity - speed the car is spinning, in radians
angularDrag - how fast the car stops spinning
power - how fast car can accelerate
turnSpeed - how fast to turn
모든 프레임 :
positionX += velocityX
positionY += velocityY
velocityX *= drag
velocityY *= drag
angle += angularVelocity
angularVelocity *= angularDrag
가속
velocityX += sin(angle) * power;
velocityY += cos(angle) * power;
왼쪽으로 조종하다
angularVelocity -= turnSpeed;
바로 조종하다
angularVelocity += turnSpeed;
드리프트를 좋게하려면 드래그와 앵귤러 드래그를 1에 매우 가깝게 설정하십시오.
답변
나는 오늘 충돌과 스핀 아웃 동안 일부 차량 역학을 시뮬레이트하는 논문을 읽었습니다.
여기에는 의도적 인 충돌 력으로 인한 요 (yaw) 동안 롤오버 모멘트 및 리어 타이어 트랙션 손실을 나타내는 물리 모델이 포함되어 있습니다. 충돌하는 동안 차량 역학에 관심이있는 게임 프로그래머에게는 흥미로운 것 같습니다.
답변
나는 일반적으로 Bourg ‘s Physics for Game Programmers를 권장하지 않지만 , 10 장 (171 페이지)에서 이것에 대해 조금 이야기하고 시작점을 줄 수 있습니다.
불행히도 PhysX의 비히클 코드는 여전히 ‘샘플’이며 문서화가 잘되어 있지 않으므로 어떻게 작동하는지 쉽게 알 수 없습니다. 샘플 디스플레이에서 파생 된 코드가 3D에서 원하는 종류의 동작을 표시한다고 생각하지만 원하는 것보다 낮은 수준의 시뮬레이션입니다.
답변
가장 먼저 알아야 할 것은 “슬립 비율”과 “견인 원”입니다. 미끄러짐 비율은 각도 차이와 측면 타이어 힘 사이의 비선형 관계로 타이어 동작에 대한 근사치입니다. 또한 운전자 토크 피드백 정보 (포스 피드백 스티어링 휠)를 제공합니다.
두 가지 개념의 초간단 버전은 다음과 같습니다. 롤링 방향과 이동 방향 사이의 각도 차이가 클수록 롤링 방향에 수직 인 힘이 더 많이 발생합니다 (측력). 타이어 각도가 증가하면 (보통) 어쩌면 5 °에서 8 °로 최고점에 도달하고 그로부터 떨어지게됩니다.
트랙션 서클은 기본적으로 외부로 나가는 힘 벡터를 잘라내는 리미터입니다. 심한 가속 / 제동이 조향 능력을 감소시키는 방식을 모델링합니다. 트랙션 서클 (최대 트랙션 포스 벡터)의 크기는 타이어를지면으로 누르는 힘에 따라 조정됩니다.
주행 / 제동 (회전) 토크 및지면으로부터의 반대되는 견인력과 별도로 측면 (조향) 힘을 모델링해야합니다.