微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何补偿额外的速度

如何解决如何补偿额外的速度

现在我正在开发一个简单的坦克 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 举报,一经查实,本站将立刻删除。