如何解决如何补偿额外的速度
现在我正在开发一个简单的坦克 AI - 它可以穿过关卡并向范围内的任何敌方物体射击。除了为导弹的速度加上恒定速度以解释坦克的速度外,没有涉及任何物理 - 代码如下所示:
private void Update()
{
if (Time.time - _lastMissileTime < _missileCooldown)
{
return;
}
Enemy target = GetClosestEnemy();
if (target == null)
{
return;
}
Vector3 shootDirection = target.transform.position - transform.position;
Shoot(shootDirection);
_shottargets.Add(target);
_lastMissileTime = Time.time;
_targets.Clear();
}
private Enemy GetClosestEnemy()
{
foreach (Enemy enemy in _enemies)
{
if (_shottargets.Contains(enemy))
{
continue;
}
if (Vector3.distance(transform.position,enemy.transform.position) > _missileRange)
{
continue;
}
_targets.Add(enemy);
}
if (_targets.Count < 1)
{
return null;
}
_targets.sort((x,y) => Vector3.distance(x.transform.position,transform.position).Compareto(Vector3.distance(y.transform.position,transform.position)));
return _targets[0];
}
private void Shoot(Vector3 direction)
{
direction.normalize();
Missile missile = Instantiate(_missilePrefab,transform.position,Quaternion.LookRotation(direction));
Vector3 tankVeLocity = _mover.Direction * _mover.Speed;
Vector3 missileVeLocity = direction * _missileSpeed + tankVeLocity;
missile.Initialize(missileVeLocity,_missileLifetime);
}
这是在调试视图中的样子 - 黄线表示直接到达目标的轨迹,红线表示导弹的实际轨迹。
https://gfycat.com/lavishcautiousgrayfox
现在我想为我的坦克 AI 添加不同级别的经验,这样老兵级别的坦克会更频繁地被击中 - 虽然我可以简单地从老兵坦克的导弹速度计算中删除坦克速度,但它有点让人感觉不舒服。我想确定坦克必须朝哪个方向射击以补偿额外的速度,但我根本无法弄清楚。 我尝试模拟实际的射击方向并通过它抵消目标的直接方向,但大多数时候它不起作用。我希望得到任何帮助和想法!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。