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