Unity3D的人工智能意识

Unity3D的人工智能意识,unity3d,Unity3d,我目前正在Unity3D中开发一个人工智能系统,我想知道是否有人可以建议以下哪种感知模型更好 使用Physics.OverlapSphere以大约每2秒的恒定速率检查一个范围内感兴趣的任何内容 使用连接到AI的球体触发器碰撞器,当对象进入该触发器时,它开始受到监视 最担心的是性能与质量,我感觉模型1的速度更快,直到AI需要检查某个特定项目周围的一切,在这种情况下,模型2返回速度会更快,因为它已经收集了本地兴趣。然而,模型2是否会占用更多资源,因为触发器对撞机需要在每次物理更新时发送检查?您的第二

我目前正在Unity3D中开发一个人工智能系统,我想知道是否有人可以建议以下哪种感知模型更好

  • 使用Physics.OverlapSphere以大约每2秒的恒定速率检查一个范围内感兴趣的任何内容

  • 使用连接到AI的球体触发器碰撞器,当对象进入该触发器时,它开始受到监视


  • 最担心的是性能与质量,我感觉模型1的速度更快,直到AI需要检查某个特定项目周围的一切,在这种情况下,模型2返回速度会更快,因为它已经收集了本地兴趣。然而,模型2是否会占用更多资源,因为触发器对撞机需要在每次物理更新时发送检查?

    您的第二种方法是最好的方法,尽管我可以很容易地说,这完全取决于您的需求,并且两者都有各自的用途。(我是“做事情的唯一绝对方式的男人”)

    带触发器

    void ontriggenter(碰撞机其他)
    您只能从已碰撞的多个碰撞体中获取一个碰撞体。如果有较大的碰撞,并且可以明确地扩展和收缩触发器的半径,使其几乎与重叠球体的效果相同(但不推荐用于保证结果),则会更快。由于它只检测到一个碰撞的物体,因此它的处理器并不密集

    使用重叠球体方法,您可以

    Collider[] OverlapSphere(Vector3 position, float radius, int layerMask, QueryTriggerInteraction queryTriggerInteraction);
    
    可以获得碰撞器[]
    或已碰撞的多个碰撞体。这是处理器密集型的,如果有50个对象发生碰撞,则性能会降低调用此函数的时间

    另一种方法。

    为了简单和正确的力学设计,触发体可以解决任何复杂的情况。我必须建议你,从我的经验来看,你解决问题所依赖的视角总是会限制你的想法和最终的结果

    记住这一点,我希望您尝试这种方法…创建一种使用

    公共静态浮动距离(Vector3A,Vector3B)

    给你一个布尔答案来检测你的演员。这是一种非常好的方法,因为只有一个语言原语(在两个参与者之间)是流式传输的,而不是对象,并且内置函数的性能可以忽略不计。您可以让每个敌方演员在列表中注册自己(他们的参考)(以获取所有感兴趣的演员),如果他们在所需的距离内(因此,是的,您的敌人会检查其是否比主演员近,并告诉演员他是非常近的人)


    我已经在20名其他演员身上测试过这种方法,他们自己的脚本在ipod gen 5中运行,几乎没有性能下降。

    我认为触发可能会比重叠更快,这是对的,但我认为轮询距离检查是错误的做法:Unity有一个“广泛阶段”这将消除对遥远物体的检查,并根据物体的运动情况跟踪需要进行的检查。但是,如果没有评测,很难说简单性(距离调查)和一般物理优化(触发器)之间的平衡点是什么。(顺便说一句,对于这个场景,20名演员对我来说似乎是一个非常小的数字。)感谢您的回复(很抱歉回复太晚),我想可以使用几种不同的技术组合。例如,为存储实体信息的整个区域设置触发器碰撞器,然后让每个实体读取触发器信息以查找感兴趣的对象。干杯