Unity2d项目A*插件实时添加障碍物

本文介绍在Unity2D项目中使用A*Pathfinding插件实现实时添加障碍物的方法,解决了敌人自动寻路时无法避开动态障碍物的问题。通过调用AstarPath.active.Scan()重新计算地图网格,确保敌人能实时调整路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Unity2d项目A*插件实时添加障碍物

一、实现步骤

可以去B站搜教程,详细的就不说了,
主要是最近在做一个塔防迷宫,
敌人得实现自动寻路。这里有一个网上搜不到的问题——实时添加障碍物。

二、个人遇到的问题

我们小组要做一个类似明日方舟的塔防游戏,不过得加入迷宫元素,就是在宽阔的地图上放置干员(防守人员)来决定怪物的走向。
使用Astart Pathfinding project插件,前期我很方便的实现了让敌人自动寻路到指定的地点。但令人头疼的是干员(防守人员)实时放置到地图中的时候,正在行进的怪物不会避让。也就是Astart算法只在开始的时候扫描了一遍地图中的网格,以后就没有实时扫描来监测和生成新的网格。

三、解决实时添加障碍物的办法

最后在A* Pathfinding Project官方网站上看文档才想到解决方案。
当你在B站上看教程,把Astart算法运用到你的项目后,你想实现实时添加障碍物的功能时,你需要用下面一条语句:

AstarPath.active.Scan();

这条语句的作用是:重新计算所有的图(You can recalculate all graphs)
将这条语句放在你实现往地图中添加障碍物功能的脚本中,具体位置应该是你在实例化一个障碍物的后面加上这一条语句。
以下是我们的项目中实现实时扫描图的:

if (canPlaceMonster())
{ 
    monster = (GameObject)Instantiate(GameManagerBehavior.Instance.ClickedBtn.TowerPrefab, transform.position, Quaternion.identity);
    AstarPath.active.Scan();//实时更新扫描网格,使得可以实时添加障碍物
    AudioSource audioSource = gameObject.GetComponent<AudioSource>();
    audioSource.PlayOneShot(audioSource.clip);
    Hover.Instance.Deactivate();
    GameManagerBehavior.Instance.BuyMonster();
    gameManager.Gold -= monster.GetComponent<MonsterData>().CurrentLevel.cost;
 }

只添加做注释的那条语句,然后你可以开始运行你的项目,随时向地图添加障碍物,敌人会实时的避开你放置的障碍物。
运用这些原理你可以做一个迷宫类的塔防,还可以让玩家先搭建一个地图然后开始塔防游戏
如果想知道我们项目的全部内容或者添加A*插件的步骤,就看点赞的伙伴们多不多了。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值