【问题标题】:Artificial Intelligence of 2D Sidescroller in Unity3DUnity3D中2D Sidescroller的人工智能
【发布时间】:2014-10-28 00:51:58
【问题描述】:

我目前正在使用 Unity 制作一款 2D 横向卷轴游戏(因此所有精灵都是从侧面查看的)。

我有程序生成的地形(想想 Terraria 式的),我希望能够单击我的一个图块并获得一条精灵路径。

不过,精灵需要知道以下几点:

  1. 该图块是否可访问(也就是它不是完全在地下或在天空中随机上升)
  2. 到达那里的最短路径是什么。

我目前将我的图块存储为一个短数组。

知道了这一点,A*是我追求的最佳算法吗?有没有人有任何其他好的信息/提示从哪里开始研究这类事情?

我的主要概念难题是让 AI 知道某个图块是否可访问。

感谢任何帮助/指针!

【问题讨论】:

  • Unity 内置的 navmesh 怎么样?
  • @LearnCocos2D Unity 的 Navmesh 不是在 x-z 轴上运行,而 2D 系统在 x-y 轴上运行吗?

标签: c# unity3d 2d artificial-intelligence unity3d-2dtools


【解决方案1】:

A* 是查找最短路径的好方法,但用于查找是否存在路径却很繁重。这是因为它在意识到没有路径之前正在搜索整个可访问空间。您可以使用this online tool 来玩不同的搜索算法。

您可以使用快速破解来判断每个不同空间的存储 ID 是否存在路径,并且所有节点都可以相互访问。使用遍历所有可访问节点的递归函数很容易分配此 ID。递归终止后,只需使用来自另一个尚无任何 ID 的空间的新 ID 重新启动它。希望下面的图片能阐明我的观点:

11111¤22222¤
111¤¤¤222¤¤¤
1¤¤¤3¤¤¤¤¤44
¤¤3333¤¤4444

其中¤ 是墙壁,数字是空间的ID。当然,您需要将存储从短数组更改为其他内容,因为您需要为每个节点存储额外的短数组。

【讨论】:

  • 嗯。所以你的意思是为空间分配ID组,然后如果块具有相同的ID,它们是可访问的?
  • 是的。你不能做比这更便宜的测试。而且我认为分配 ID 是 O(2 * n) (这非常好,你只需要做一次)。因为您可以遍历每个节点,并且每次找到没有 ID 的节点时,请启动递归 ID 设置器。递归函数的所有启动组合将仅通过每个空间节点一次。
猜你喜欢
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-25
  • 2011-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多