C#游戏AI的3大路径查找绝招!从“迷路NPC”到“导航达人”只需1步?

🔥关注墨瑾轩,带你探索编程的奥秘!🚀
🔥超萌技术攻略,轻松晋级编程高手🚀
🔥技术宝库已备好,就等你来挖掘🚀
🔥订阅墨瑾轩,智趣学习不孤单🚀
🔥即刻启航,编程之旅更有趣🚀

在这里插入图片描述在这里插入图片描述

“我的NPC像个‘路痴’!总是在墙角转圈圈!”
这是我在某次游戏开发中听到的“灵魂拷问”。当时,角色在地图上走来走去却找不到终点,路径查找算法成了“摆设”。

路径查找算法,就像“导航员”——没有它,NPC只能靠“玄学”走路!而A*算法(A-Star)就是游戏AI的“金牌导航”,从《魔兽争霸》到《塞尔达传说》,它都是幕后英雄!

今天,我们就用C# + Unity(或纯C#)来“手把手”实现A*算法!从0到1,代码+幽默+保姆级解析,让你看完就能复现!


一、A*算法的“三大核心”

核心1:节点(Node)——“地图上的每一个格子”

“没有节点?你的地图就像‘空白画布’!”

目标:定义节点类,存储坐标、成本、邻居等信息。
技术点

  • 使用gCost(从起点到当前点的实际成本)。
  • 使用hCost(从当前点到终点的预估成本)。
  • 使用fCost = gCost + hCost(总成本)。

代码示例

// 节点类(Node.cs)
public class Node
{
   
   
    public int X {
   
    get; set; } // X坐标
    public int Y {
   
    get; set; } // Y坐标
    public bool IsWalkable {
   
    get; set; } // 是否可通行
    public float GCost {
   
    get; set; } // 从起点到当前点的实际成本
    public float HCost {
   
    get; set; } // 从当前点到终点的预估成本
    public float FCost => GCost + HCost; // 总成本
    public Node Parent {
   
    get; set; } // 父节点(用于回溯路径)
    public List<Node> Neighbors {
   
    get; set; } = new List<Node>(); // 邻居节点
}

代码解析

  • IsWalkable:判断该节点是否可通行(如是否是障碍物)。
  • FCost:通过属性自动计算总成本,无需手动维护。

小墨吐槽

“节点就像‘地图上的地标’,没有它,NPC连家都找不到!”


核心2:开放列表 vs 关闭列表——“决策的‘大脑’”

“没有列表?你的算法就像‘无头苍蝇’!”

目标:通过开放列表(Open List)和关闭列表(Closed List)管理搜索过程。
技术点

  • 开放列表:待探索的节点(按FCost排序)。
  • 关闭列表:已探索的节点(防止重复计算)。

代码示例

// A*算法核心逻辑(Pathfinder.cs)
public class Pathfinder
{
   
   
    private Node[,] _grid; // 地图网格
    private int _gridWidth; // 网格宽度
    private int _gridHeight; // 网格高度

    public Pathfinder(Node[,] grid, int width, int height)
    {
   
   
        _grid = grid;
        _gridWidth = width;
        _gridHeight = height;
    }

    // 查找路径
    public List<Node> FindPath(Node start, Node end)
    {
   
   
        var openList = new List<Node> {
   
    start }; // 开放列表
        var closedList = new List<Node>(); // 关闭列表

        while (openList.Count > 0)
        {
   
   
            // 选择FCost最小的节点
            var currentNode = openList.OrderBy(n => n.FCost).First()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨瑾轩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值