【unity造轮子】2d使用A*Pathfinding插件实现敌人AI,并自动躲避障碍物

本文主要是介绍【unity造轮子】2d使用A*Pathfinding插件实现敌人AI,并自动躲避障碍物,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最终效果
在这里插入图片描述
插件下载链接:
https://download.csdn.net/download/qq_36303853/87762376
可以前往官网下载和查看开发文档
https://arongranberg.com/astar/download

导入AI插件
在这里插入图片描述

新建空物体,添加PathFinder组件,用在地图导航
在这里插入图片描述
渲染导航路径,绘制出来的蓝色部分则为可行走区域,非蓝色区域是我配置的碰撞器区域,可自行修改,如果不满意可以修改Diameter的值,控制碰撞器区域多大的范围不可行走
在这里插入图片描述

给敌人添加碰撞器,碰撞区域自行调整
在这里插入图片描述
给敌人添加AIPath组件,我们这里的2d项目,记得orientation先选择YAxisForward(for 2D games),如果你不想敌人旋转,可以去掉勾选Enable Rotation
在这里插入图片描述

常用参数解释
can move表示能否移动
max speed表示移动速度
rotation speed表示旋转速度
slowdown distance表示减速距离
end reached distance表示停止距离,表示怪物距离玩家多远的适合会停止移动
pick next waypint dist表示距离下个路径点的距离
Gravity表示重力,这里不需要重力所以选择none

再给敌人添加AI Destination setter组件,这个是设置敌人的目标,拖入我们的玩家即可

在这里插入图片描述
运行效果
在这里插入图片描述

代码控制敌人移动,并发起攻击

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Pathfinding;public class Enemy : MonoBehaviour
{public float startHealth = 100;//开始血量public float health;//当前血量public bool isDead;//是否死亡public float damage = 10;//敌人伤害public float hitRate = 1.0f;//攻速private float _lastHit;//计时器public LayerMask whatToHit;//可以攻击哪个图层private float hitDistance = 2.0f;//攻击距离[Header("ai导航属性")]private AIPath aiPath;private Transform target; //目标private void Start(){aiPath = GetComponent<AIPath>();target = GameObject.FindGameObjectWithTag("Player").transform;health = startHealth;}private void Update(){if (target == null) return;aiPath.destination = target.position;//敌人移动的目标位置if (aiPath.reachedDestination)//是否抵达目标位置{//发起攻击if (Time.time > _lastHit + 1 / hitRate){Hit();_lastHit = Time.time;}}}//攻击void Hit(){//怪物朝向Vector3 targetDirection = (target.position - transform.position).normalized;//射线 aiPath.endReachedDistance表示抵达终点的距离RaycastHit2D hit2D = Physics2D.Raycast(transform.position, targetDirection, aiPath.endReachedDistance + hitDistance, whatToHit);if (hit2D.collider != null){Debug.Log(damage);//造成伤害PlayerController playerController = hit2D.collider.GetComponent<PlayerController>();playerController?.TakeDamage(damage);}}
}

其他

还有一个Unity2d自动寻路插件NavMeshPlus,需要的可以去了解
git地址:https://github.com/h8man/NavMeshPlus

区别

A*Pathfinding插件和NavMeshPlus插件都是Unity的导航网格相关的插件。它们之间的区别主要体现在以下几个方面:

1.算法原理:A* Pathfinding插件使用的是A*算法来搜索最短路径,而NavMeshPlus插件使用的是Unity自带的导航网格系统来计算路径。

2.功能特点:A* Pathfinding插件提供了大量的路径搜索和寻路算法,同时还提供了寻路障碍物躲避、寻路优化等功能;而NavMeshPlus插件则主要关注于优化Unity的导航网格系统,提供了更高效更准确的表面剖分、NavMesh配置和障碍物遮蔽等功能。

3.使用成本:A* Pathfinding插件需要进行额外的配置和调试,而NavMeshPlus插件则更加易用,直接在Unity中就能够完成操作。

基于以上区别,推荐的使用场景为:如果您需要复杂的寻路算法、路线优化或存在大量的寻路单位,建议使用A*Pathfinding插件;如果您只需要简单的寻路算法,或需要优化现有导航网格的性能,建议使用NavMeshPlus插件。

总而言之,这两个插件都是非常优秀的导航网格相关插件,具体的使用需根据实际需求进行选择。

为啥大量的寻路单位推荐使用A*Pathfinding?

A* Pathfinding插件采用了基于图的最短路径搜索算法,相比于Unity的导航网格系统来说,对于大量的寻路单位能够更快速地搜索到最短路径,避免了因为单位数量增加而导致导航网格系统计算路径的效率下降的问题。

A* Pathfinding插件还提供了很多高级算法,如流形平滑、局部避障等算法,能够对路径进行优化或者避免行进时的碰撞,尤其适用于复杂的场景以及大量单位的游戏中。

此外,A* Pathfinding可以配置多个线程来计算寻路,能够进一步提高性能。而Unity的导航网格是单线程计算,一旦出现大量的寻路单位,计算时间会成倍增加。

因此,对于场景中存在大量的寻路单位的游戏,推荐使用A* Pathfinding插件。

这篇关于【unity造轮子】2d使用A*Pathfinding插件实现敌人AI,并自动躲避障碍物的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/396643

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

AI绘图怎么变现?想做点副业的小白必看!

在科技飞速发展的今天,AI绘图作为一种新兴技术,不仅改变了艺术创作的方式,也为创作者提供了多种变现途径。本文将详细探讨几种常见的AI绘图变现方式,帮助创作者更好地利用这一技术实现经济收益。 更多实操教程和AI绘画工具,可以扫描下方,免费获取 定制服务:个性化的创意商机 个性化定制 AI绘图技术能够根据用户需求生成个性化的头像、壁纸、插画等作品。例如,姓氏头像在电商平台上非常受欢迎,

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传