URL
status
type
date
slug
summary
tag
category
password
icon
人工智能导论的老师留了一个作业,就是学习一种算法,在学完数据结构之后,我几乎没再碰算法,想不出逻辑思路是一方面,实用性一般又是一方面。实际开发中,大部分情况下使用算法,都是依赖方法的封装,就算不理解其内部的实现原理也毫无影响(一言以蔽之,能够使用技术比研究技术原理更重要)。但正如消费要赋税,学生要完成作业,于是就有了这篇文章。
有三种经典的寻路算法,一种是广度优先算法(BFS),一种是迪杰斯特拉算法(Dijkstra),还有一种是A*算法,在游戏中,A*算法是最常用的路径搜索算法。
对于大多数游戏开发需求,Unity的内置导航系统已经足够强大,能够满足大部分的导航需求,无需开发者自行实现A*或其他路径搜索算法。
虽然Unity的
NavMeshAgent
组件的 SetDestination
方法没有明确说明使用了A*算法,但它确实使用了一种高效的启发式搜索算法来计算路径,这与A*算法的目标是一致的。对于开发者来说,使用Unity的导航系统可以避免重复造轮子,让开发过程更加高效。以下是Unity手册中对于SetDestination
方法的记录:AI.NavMeshAgent-SetDestination
返回
bool 如果目标请求成功,则返回 true,否则返回 false。描述
设置或更新目标,从而触发新路径计算。请注意,路径可能在几帧之后才可用。 计算路径时,pathPending 将为 true。 如果有效路径可用,代理将恢复移动。
算法思路
A*寻路算法利用G,H,F三个主要数值来计算最佳路径,
G代价表示从某节点到开始节点的移动距离,
H代价则相反,它表示某节点到目标节点的估计移动距离,H代价本质上是乐观的,所以是小于等于实际代价的,它永远不会比实际代价大。
F代价=G代价+H代价,F值越低,作为寻径选择就越有吸引力,我们的目标是简单地选择最低的F代价,不断地重复,直至抵达目标点。
这个实现是一个简化的版本,它没有包含所有的功能,比如正确的节点比较逻辑来选择最低成本的节点,以及对网格的初始化。在实际应用中,还需要根据具体需求来调整和完善这个算法.
- 作者:Cloud
- 链接:https://cloud09.xyz/article/6f7963d6-e59a-4a15-98ff-a25d9a9a7986
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。