답변:
이것은 매우 단순화 된 버전이지만 대부분의 아케이드 유형 게임에는 적합합니다. 다음과 같은 속성이 필요합니다.
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) 동안 롤오버 모멘트 및 리어 타이어 트랙션 손실을 나타내는 물리 모델이 포함되어 있습니다. 충돌하는 동안 차량 역학에 관심이있는 게임 프로그래머에게는 흥미로운 것 같습니다.
가장 먼저 알아야 할 것은 "슬립 비율"과 "견인 원"입니다. 미끄러짐 비율은 각도 차이와 측면 타이어 힘 사이의 비선형 관계로 타이어 동작에 대한 근사치입니다. 또한 운전자 토크 피드백 정보 (포스 피드백 스티어링 휠)를 제공합니다.
두 가지 개념의 초간단 버전은 다음과 같습니다. 롤링 방향과 이동 방향 사이의 각도 차이가 클수록 롤링 방향에 수직 인 힘이 더 많이 발생합니다 (측력). 타이어 각도가 증가하면 (보통) 어쩌면 5 °에서 8 °로 최고점에 도달하고 그로부터 떨어지게됩니다.
트랙션 서클은 기본적으로 외부로 나가는 힘 벡터를 잘라내는 리미터입니다. 심한 가속 / 제동이 조향 능력을 감소시키는 방식을 모델링합니다. 트랙션 서클 (최대 트랙션 포스 벡터)의 크기는 타이어를지면으로 누르는 힘에 따라 조정됩니다.
주행 / 제동 (회전) 토크 및지면으로부터의 반대되는 견인력과 별도로 측면 (조향) 힘을 모델링해야합니다.