2014-10-28 43 views
2

我目前正在Unity中制作一款2D 2D侧视器(所以所有的精灵都从侧面看)。Unity3D中的2D Sidescroller的人工智能

我已经程序化地生成了地形(所以认为Terraria-esque),并且我希望能够点击我的一个贴图并且有一个贴图路径。

然而,精灵需要知道以下几点:

  1. 无论瓷砖是可访问的(也就是它不是完全处于地下或一路随机在天空)
  2. 的最短路径是什么到那里。

我目前正在将我的瓷砖存储为短阵列。

了解这一点,是我*追求的最佳算法?有没有人有任何其他良好的信息/提示从哪里开始寻找这种事情?

我的主要概念上的困难是让AI知道一个贴图是否可以访问。

任何帮助/指针表示赞赏!

+0

Unity内建的navmesh呢? – LearnCocos2D 2014-10-28 10:31:41

+0

@ LearnCocos2D不是Unity的Navmesh在x-z轴上操作,而2D系统是在x-y轴上操作的? – Jestus 2014-10-28 11:59:38

回答

1

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

您可以用来判断是否有路径的快速入侵是每个不同空间的商店ID,并且所有节点都可以互相访问。通过遍历所有可访问节点的递归函数很容易分配这些ID。递归终止后,再从另一个尚未有任何ID的空间中重新启动它。希望下面的图片阐明我的观点:

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

在这¤是墙壁和数字空间的ID。当然,您需要将存储空间从短阵列改为其他阵列,因为您需要为每个节点存储额外的空间。

+0

嗯。所以你说的是为空间分配一组ID,然后如果块有相同的ID,他们可以访问? – Jestus 2014-10-29 04:05:32

+0

是的。你不能做比这更便宜的测试。我认为分配ID是O(2 * n)(这很好,你只需要做一次)。因为您可以遍历每个节点,并且每次找到没有ID的节点时,请启动递归ID设置器。组合递归函数的所有启动只会经过每个空间节点一次。 – maZZZu 2014-10-29 05:58:58