URL
status
type
date
slug
summary
tags
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代价,不断地重复,直至抵达目标点。
这个实现是一个简化的版本,它没有包含所有的功能,比如正确的节点比较逻辑来选择最低成本的节点,以及对网格的初始化。在实际应用中,还需要根据具体需求来调整和完善这个算法.
 
 
充实且失败的五一假期C#|对比主体表达式和readonly
Loading...
Cloud
Cloud
Free writing
最新发布
Project Pianting设计文档
2025-1-7
第一年
2025-1-6
水族馆
2025-1-6
Flow in Games
2025-1-6
MISIDE текстовое интервью с разработчиком
2025-1-6
Unity实现多人联机(基于Mirror+Steamworks)
2025-1-6
公告