首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >运用Unity3D的人工智能意识

运用Unity3D的人工智能意识
EN

Stack Overflow用户
提问于 2015-08-11 22:18:25
回答 1查看 505关注 0票数 2

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

  1. 使用Physics.OverlapSphere以大约每2秒的恒定速率检查范围内是否有任何感兴趣的内容。
  2. 使用附加到AI的Sphere触发器对撞机,当一个对象进入该触发器时,它将开始受到监视。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-07 20:32:55

您的2方法是最好的方法,尽管如此,我可以很容易地说,这一切都取决于您的需求,两者都有自己的用途。(我是“做事情的唯一绝对方式-有点像男人”)

带触发器的

void OnTriggerEnter(Collider other)你只能得到一个碰撞体,从许多已经碰撞。如果你有较大的碰撞,它会更快,并且你可以确定地扩展和收缩你的触发器的半径,几乎把它用作与重叠球体相同的效果(但不推荐有保证的结果)。因为它只检测到一个碰撞的身体,它的处理器不密集。

使用重叠球方法,您可以

代码语言:javascript
运行
复制
Collider[] OverlapSphere(Vector3 position, float radius, int layerMask, QueryTriggerInteraction queryTriggerInteraction);

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

另一种方法.

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

记住这一点,我想让您尝试一下这个approach...create --一种使用

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

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

我在ipod 5中测试了20名其他演员的脚本,几乎没有出现任何性能下降。

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

https://stackoverflow.com/questions/31952953

复制
相关文章

相似问题

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