首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止AI摇动

防止AI摇动
EN

Stack Overflow用户
提问于 2014-08-20 17:58:00
回答 1查看 189关注 0票数 0

我有一个AI,它是一个守门员,试图阻止尽可能多的球进入球门。可以有多个球朝向球门。AI经常检查(检查一次帧)哪个球是最近的,并试图阻止最近的球。

假设守门员在球门中间,两个球,球1和球2,一个向右,另一个向左。两者离目标的距离是相同的(或者两者的距离都很近)。守门员开始颤抖。

我猜这是因为在一个框架球,1是最近的,所以它移动到球1,然后下一个框架球2是最近的,所以它移动到球2...then球1,然后球2,然后球1...etc。

我怎样才能防止这种情况发生?如果有人想提供编码,我使用的是统一引擎和C#编码。

编辑1:两个球都以相同的速度运行。

编辑2:,我用来检查最近的球的代码。每一帧都是这样的。

代码语言:javascript
复制
GameObject FindClosestBall() {
    GameObject[] gos;
    gos = GameObject.FindGameObjectsWithTag("Ball");
    GameObject closest;
    float distance = Mathf.Infinity;
    Vector3 position = transform.position;
    foreach (GameObject go in gos) {
        Vector3 diff = go.transform.position - position;
        float curDistance = diff.sqrMagnitude;
        if (curDistance < distance) {
            closest = go;
            distance = curDistance;
        }
    }
    return closest;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-20 18:06:04

您可以尝试设置一个必须满足的阈值,使两个距离被认为是不相等的。

例如,假设您选择的阈值为0.5:

那么,如果Ball 1的距离为4.8,而Ball 2的距离为5.0,则可以将它们视为相等的距离,并通过平分法在两者之间进行选择(即,选择球1而不是球2,因为1< 2)。

调整阈值,直到它正常工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25411436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档