Descent Freespace를 기억하는 사람들에게는 비 호환 미사일이나 레이저를 쏠 때 적을 조준하는 데 도움이되는 멋진 기능이 있습니다. 표적.
/programming/4107403/ai-algorithm-to-shoot-at-a-target-in-a-2d-game?lq=1 의 답변을 사용해 보았지만 2D 용이므로 시도했습니다. 그것을 적응시키는 것.
먼저 계산을 분해하여 XoZ 평면의 교점을 해결하고 x 및 z 좌표를 저장 한 다음 XoY 평면의 교점을 해결하고 y 좌표를 최종 xyz에 추가 한 다음 클립 공간으로 변환하고 텍스처를 배치했습니다. 좌표. 그러나 물론 그것은 질문을 게시하지 않았거나 그렇지 않은 것처럼 작동하지 않습니다.
XoZ 평면에서 x를 찾은 후 XoY에서 x를 찾은 후 알 수 있듯이 x는 같지 않으므로 무언가 잘못되어야합니다.
float a = ENG_Math.sqr(targetVelocity.x) + ENG_Math.sqr(targetVelocity.y) -
ENG_Math.sqr(projectileSpeed);
float b = 2.0f * (targetVelocity.x * targetPos.x +
targetVelocity.y * targetPos.y);
float c = ENG_Math.sqr(targetPos.x) + ENG_Math.sqr(targetPos.y);
ENG_Math.solveQuadraticEquation(a, b, c, collisionTime);
처음 targetVelocity.y는 실제로 targetVelocity.z (targetPos와 동일)이고 두 번째는 실제로 targetVelocity.y입니다.
XoZ 이후의 최종 위치는
crossPosition.set(minTime * finalEntityVelocity.x + finalTargetPos4D.x, 0.0f,
minTime * finalEntityVelocity.z + finalTargetPos4D.z);
XoY 이후
crossPosition.y = minTime * finalEntityVelocity.y + finalTargetPos4D.y;
두 비행기로 분리하고 좋은 계산 방법을 사용합니까? 또는 3D의 경우 완전히 다른 접근법이 있습니까?
- sqr ()은 sqrt가 아닌 square입니다-혼동을 피하십시오.