## Unity3D AStar地图编辑与寻路测试详解

news/2024/5/25 10:35:52/文章来源:https://blog.csdn.net/Thomas_YXQ/article/details/136560308

### 前言

A算法是一种常用的寻路算法，能够帮助游戏对象在地图中找到最短路径。本文将详细介绍如何在Unity3D中使用A算法进行地图编辑和寻路测试。

A*算法的核心是计算每个节点的启发函数值，然后选择最小的启发函数值的节点进行扩展。在扩展节点时，需要考虑周围的邻居节点，计算它们的启发函数值并将其加入OpenList中。直到找到目标节点或者OpenList为空时算法结束。

``````using System.Collections.Generic;
using UnityEngine;public class AStar : MonoBehaviour
{private List<Node> OpenList = new List<Node>();private List<Node> ClosedList = new List<Node>();public List<Node> FindPath(Vector2Int start, Vector2Int end){Node startNode = new Node(start);Node endNode = new Node(end);OpenList.Add(startNode);while (OpenList.Count > 0){Node currentNode = GetLowestFNode(OpenList);OpenList.Remove(currentNode);ClosedList.Add(currentNode);if (currentNode.Equals(endNode)){return CalculatePath(startNode, currentNode);}List<Node> neighbors = GetNeighbors(currentNode);foreach (Node neighbor in neighbors){if (ClosedList.Contains(neighbor)){continue;}int newG = currentNode.G + 1;if (newG < neighbor.G || !OpenList.Contains(neighbor)){neighbor.G = newG;neighbor.H = CalculateH(neighbor, endNode);neighbor.Parent = currentNode;if (!OpenList.Contains(neighbor)){OpenList.Add(neighbor);}}}}return null;}private Node GetLowestFNode(List<Node> nodes){Node lowestNode = nodes[0];foreach (Node node in nodes){if (node.F < lowestNode.F){lowestNode = node;}}return lowestNode;}private List<Node> GetNeighbors(Node node){List<Node> neighbors = new List<Node>();// TODO: Add code to get neighbors of current nodereturn neighbors;}private int CalculateH(Node node, Node endNode){return Mathf.Abs(node.Position.x - endNode.Position.x) + Mathf.Abs(node.Position.y - endNode.Position.y);}private List<Node> CalculatePath(Node startNode, Node endNode){List<Node> path = new List<Node>();Node currentNode = endNode;while (!currentNode.Equals(startNode)){path.Add(currentNode);currentNode = currentNode.Parent;}path.Reverse();return path;}
}public class Node
{public Vector2Int Position;public int G;public int H;public Node Parent;public int F{get { return G + H; }}public Node(Vector2Int position){Position = position;}public override bool Equals(object obj){Node other = obj as Node;if (other == null){return false;}return Position.Equals(other.Position);}public override int GetHashCode(){return Position.GetHashCode();}
}``````

Unity3D​www.bycwedu.com/promotion_channels/2146264125

### Python 常用的开源爬虫库介绍

Python 是一种广泛使用的编程语言&#xff0c;特别是在 Web 爬虫领域。有许多优秀的开源爬虫库可以帮助开发者高效地抓取网页内容。以下是几个常用的 Python 爬虫库及其特点和优势&#xff1a; BeautifulSoup 特点 - **HTML/XML 解析**&#xff1a;BeautifulSoup 是一个…

### Windows电脑安装Linux（Ubuntu 22.04）系统（图文并茂）

Windows电脑安装Ubuntu 22.04系统&#xff0c;其它版本的Ubuntu安装方法相同 Ubuntu 16.04、Ubuntu 18.04安装方法相同&#xff0c;制作U盘启动项的镜像文件下载你需要的版本即可&#xff01; Ubuntu的中文官网网址&#xff1a;https://cn.ubuntu.com/&#xff0c;聪明的你一定…

### C#，数值计算，希尔伯特矩阵（Hilbert Matrix）的算法与源代码

Hilbert, David (1862-1943) 1 希尔伯特（Hilbert） 德国数学家，在《几何学基础》中提出了第一套严格的几何公理（1899年）。他还证明了自己的系统是自洽的。他发明了一条简单的空间填充曲线，即埃里克魏斯汀的数学世界，即希尔伯特曲线，埃里克魏斯汀的数学世界，并证明了不…

### Unity资源热更新----AssetBundle

13.1 资源热更新——AssetBundle1-1_哔哩哔哩_bilibili Resources 性能消耗较大 Resources文件夹大小不能超过2个G 获取AssetBundle中的资源 打包流程 选择图片后点击 创建文件夹&#xff0c;Editor优先编译 打包文件夹位置 using UnityEditor; using UnityEngine; public cla…