it编程 > 开发工具 > IDE

【Unity】AI-Navigation导航系统生成导航网络

41人参与 2024-08-03 IDE

ai-navigation导航系统生成导航网络

导航网格的生成

  1. 在unity资源包中添加 ai navigation 插件,并 install 。
    在这里插入图片描述

  2. 找到 an 标志,勾选 show only selected(可有可无,只是为了更好地看出来网格在哪)。
    在这里插入图片描述

  3. 在project面板里面创建 ai->navmesh surface 文件。
    请添加图片描述

  4. 双击新建的文件,点击 back 烘焙网格。
    在这里插入图片描述

  5. 勾选 show navmesh 显示效果,识别为是否是障碍物的依据,就是观察其身体上面是否有 collider 组件,如果有便是障碍物存在。
    在这里插入图片描述

  6. 移除某个物体为障碍物(障碍物为没有蓝色覆盖的位置)在此物体上面添加 navmeshmodifier 组件,将 mode 修改为 remove object。
    在这里插入图片描述

  7. 点击 navmesh surface 文件,点击 back 重新烘焙。
    在这里插入图片描述
    在这里插入图片描述

  8. 添加某个物品为障碍物,方法一:在其下方右键 ai->navmesh modifier volume 。设置一块区域设置为障碍物的区域。

请添加图片描述

  1. 点击新建的 navmesh modifier volume 文件,将 areatype 改为 not walkable 状态。(注:每一步都要重新进行烘焙才能显示效果)(适合设置大片区域 )
    在这里插入图片描述

  2. 方法二:或是在身上添加组件 navmesh obstacle 组件。(适合设置单个物体)
    在这里插入图片描述

  3. 方法三:或是在想设为障碍物的身上添加组件 navmesh modifier 组件并将mode修改为remove object。
    请添加图片描述

  4. 对于房子这种装饰物,还可以通过勾选 override area,并将 area type 改为 not walkable 状态。
    在这里插入图片描述

通过navmesh控制主角移动。

  1. 在主角身上添加一个 navmesh agent 组件
    在这里插入图片描述
  2. 添加脚本控制主角移动。
using system.collections;
using system.collections.generic;
using unityengine;
using unityengine.ai;
using unityengine.eventsystems;


/// <summary>
/// 鼠标点击某位置移动
/// </summary>

public class playermove : monobehaviour
{
    private navmeshagent playeragent;
    
    void start()
    {
        playeragent=getcomponent<navmeshagent>();
    }

    
    void update()
    {
        if(input.getmousebuttondown(0)&&eventsystem.current.ispointerovergameobject()==false)//检测鼠标的点击
        {
            ray ray = camera.main.screenpointtoray(input.mouseposition);//获取鼠标的位置,并在此位置上发射一条射线。

            raycasthit hit;
            bool iscollide = physics.raycast(ray, out hit);//记录射线检测的位置和信息,并检测是否碰撞到
            if (iscollide)
            {

                if (hit.collider.tag == "ground")
                {
                    playeragent.stoppingdistance = 0;
                    playeragent.setdestination(hit.point);//获取碰撞的点
                }
                else if(hit.collider.tag =="interactable")
                {
                    hit.collider.getcomponent<interactableobject>().onclick(playeragent);
                }
            }
        }
    }
}

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

调用华为云实现人证核身证件版(二要素)

08-03

「硬核干货」品牌/媒体/营销/用户运营/IT系统专业英文汇编|徐礼昭

08-03

【鸿蒙实战开发】基于Navigation的路由管理

08-03

【腾讯云Cloud Studio实战训练营】使用Cloud Studio迅捷开发一个3D家具个性化定制应用

08-03

Flink 数据类型 & TypeInformation信息

08-02

调用openai 的文生图功能,用中文制作图片

08-04

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论