Возможно, будет проще обновить положение пули по кадрам, но я пытался решить уравнение линии от башни до ожидаемой позиции врага.
Equation from Enemy => Target = EnemyOrigin + EnemyDirection.Normalized * EnemySpeed * Time;
Equation from Tower => Target = TowerOrigin + BulletDirection.Normalized * BulletSpeed * Time;
Target = EO + ED * ES * T, Target = TO + BD * BS *T =>
(EO - TO) + ED * ES * T
=> EO + ED * ES * T = TO + BD * BS * T => BD = -----------------------
BS * T
Теперь мы не знаемВремя, но мы можем приблизить его, (пули будут иметь разную скорость относительно расстояния):
Time = |(EnemyOrigen - TowerOrigen) / BulletSpeed| = |(EO - TO) / BS|;
(EO - TO )+ ED * ES * (EO - TO) / BS
=> BD = ---------------------------------------- => (+-1) * (One + (ED * ES) / BS);
BS * (EO - TO) / BS
Теперь мы знаем BulletDirection, BulletOrigen и продолжительность полета, мы должны только интерполировать
BulletPos = TowerOrigin + BulletDirectionNormalized * BulletSpeed * TimeElapsedFromShot;
Я не проверял это, и, возможно, это не хорошее решение .., но только для того, чтобы показать другую альтернативу ...;)