如何补偿额外的速度

问题描述

现在我正在开发一个简单的坦克 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 (将#修改为@)