如何避免附近攻击的数据?

时间:2018-07-05 07:42:24

标签: c# unity3d artificial-intelligence

我希望AI避免攻击,但不确定如何获取数据。我制作了警告系统,当warning_box和字符冲突时会注意到AI。您可能只需要看下面的图片就可以理解

enter image description here

警告是在攻击开始之前进行的。这是警告类的相关代码

private void OnTriggerEnter(Collider other)
{
    CharacterInteractor enemy = other.GetComponent<CharacterInteractor>();
    CharacterInteractor atker = attacker.GetComponent<CharacterInteractor>();

    if (enemy != null)
        // attacker and warned characters are different team
        if (attacker == null || enemy.team != atker.team)   
            enemy.Warn(this); 
}
private void OnTriggerExit(Collider other)
{
    CharacterInteractor enemy = other.GetComponent<CharacterInteractor>();
    CharacterInteractor atker = attacker.GetComponent<CharacterInteractor>();

    if (enemy != null)
        if (attacker == null || enemy.team != atker.team)   // 상대가 적일 때
            enemy.WarnOff(this);
}

但是仅仅知道现在有什么危险是不够的。为了找出最佳避免方向,AI也需要其他警告的数据。所以我在考虑两种样式,但是两种样式都有问题。

瓷砖系统

enter image description here

瓷砖系统在角色周围使用多个对撞机,以查找接触到的警告。在瓷砖之间放置安全位置时,效果不好。

雷达系统

enter image description here

雷达系统将SphereCast()用于多个半径。我只能得到警告有多近,警告的中心在哪里,无法获得避免的方向。 (也许我不知道正确的Unity API)

我不知道如何解决这些问题。有什么好的方法或例子可以解决问题?

1 个答案:

答案 0 :(得分:1)

我与朋友们讨论了这个问题,并得到了比我问的更好的主意。

变得更好

  1. 瓷砖系统,但使用更小,更多的瓷砖。

降低成本

  1. 使用5m的Sphere Cast查找警告。如果发现警告,请部署图块系统矩阵。