더 구체적으로 설명해 드리겠습니다. 발사체는 A 지점에서 발사되고 2D에서 일정한 속도로 수평 이동하는 B를 명중해야합니다.
이
는 시간에 발사체의 위치이다
P.x = A0.x + VP0.x * t
P.y = A0.y + VP0.y * t - g/2 * t^2
그리고이 시간이 지남에 따라, B의 위치이다
A0는 이때, 위치이다
B.x = B0.x + VB0.x * t
B.y = B0.y
0; B0는 시간 0에서 B의 위치이고; VB0는 B의 속도 (상수와 수평 만)이고 VP0는 발사체를 발사 할 속도입니다. 't'(발사체가 B를 치는 데 걸리는 시간)의 값을 조정하여 시스템을 제한하면 VP0을 해결해야합니다.
A0.x + VP0.x * t = B0.x + VB0.x * t
A0.y + VP0.y * t - g/2 * t^2 = B0.y
해결 VP0 :
VP0.x = (B0.x - A0.x)/t + VB0.x
VP0.y = (B0.y - A0.y)/t + g/2 * t
을 이제 우리는 발사체의 속도를 가지고, 그것을 수행 할 수 있습니다 시뮬레이션 우리는 충돌시에, P와 B가 동일한 것이라고 말하여이 작업을 수행 할
// calculate velocity when firing projectile
launchVelocity.x = (b.x - a.x)/desired_time + velocity_b.x;
launchVelocity.y = (b.y - a.x)/desired_time + gravity/2 * desired_time;
// then for each frame, update position
elapsedTime += dt;
projectile.x = a.x + launchVelocity.x * elapsedTime;
projectile.y = a.y + (launchVelocity.y - gravity/2 * elapsedTime) * elapsedTime;
단점은 B가 A쪽으로 이동하면 velocity_b가 음수가 될 수 있다는 것입니다. "그것은 작동하지 않았다"에 대한 Projectile motion
-1 : –
게시물 개선에 대한 도움을 받으려면 http://stackoverflow.com/help/mcve를 참조하십시오. – jordanhill123
@ JohnSaunders : 몇 가지 방법을 시도해 보았습니다. -> 가장 간단한 방법은 중력 이외에 AddForce를 위쪽 방향으로 사용하는 것입니다. 그 외에 대상 대상에 대한 시작 각도를 계산하려했지만 그 중 아무 것도 작동하지 않았습니다. –