AI3与Unity3D的意识

时间:2015-08-11 22:18:26

标签: unity3d

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

  1. 以大约每2秒的恒定速率使用Physics.OverlapSphere来检查感兴趣的范围。

  2. 使用附加到AI的球形触发器对撞机,当对象进入此触发器时,它开始受到监控。

  3. 主要担心性能与质量,我感觉模型1更快,直到AI需要检查特定项目周围的所有内容,在这种情况下,模型2会更快地返回,因为它已经收集了当地的兴趣。但是,模型2会占用更多资源,因为触发器对撞机需要在每次物理更新时发送检查吗?

1 个答案:

答案 0 :(得分:1)

你的第二种方法是最好的方法,尽管如此,我可以很容易地说这一切都取决于你的要求,两者都有自己的用途。 (我“只是做事的绝对方式”)

使用触发器

void OnTriggerEnter(Collider other) 你只能从碰撞的许多碰撞体中获得一个碰撞体。如果你有大的碰撞,它会更快,你可以绝对地扩展和收缩你的触发器的半径,几乎使用它作为与重叠球体相同的效果(但不建议保证结果)。因为它只检测到一个碰撞的物体,而不是处理器密集型。

使用重叠球方法,您可以

Collider[] OverlapSphere(Vector3 position, float radius, int layerMask, QueryTriggerInteraction queryTriggerInteraction);

你可以得到 collider [] 或碰撞过的多个碰撞体。这是处理器密集型的,如果您有50个对象发生冲突,性能会降低您调用此函数的时间。

另一种方法。

为了简化和正确设计力学,触发器主体可以解决任何复杂的情况。我必须建议你,根据我的经验,你依靠解决问题的观点总是会限制你的想法并最终影响你的结果。

记住这一点,我希望你尝试这种方法......创建一个使用

的方法

public static float Distance(Vector3 a, Vector3 b);

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

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