unity3d 通过Nav Mesh Agent组件实现敌人巡逻以及有关“SetDestination”报错问题解决

这篇具有很好参考价值的文章主要介绍了unity3d 通过Nav Mesh Agent组件实现敌人巡逻以及有关“SetDestination”报错问题解决。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先展示效果:

在实现敌人自动巡逻这一块我们可以通过使用unity自带组件Nav Mesh Agent(导航网格代理),在省去冗杂的代码量的同时可便利的实现这一功能。

首先为敌人添加Nav Mesh Agent组件:

unity3d 通过Nav Mesh Agent组件实现敌人巡逻以及有关“SetDestination”报错问题解决

https://docs.unity.cn/cn/2018.4/Manual/class-NavMeshAgent.html

以上是unity官方手册上关于该组件的详细介绍,这里比较重要的就是Speed(移动速度),Angular Speed(旋转速度)以及Stopping Distance(接近目标距离多少即停止),这三个值需要按照自己需要设置,其余保持默认即可。

接下来上代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class AIFindWay : MonoBehaviour
{
    public NavMeshAgent agent;
    public Transform[] Points;//通过数组形式可设置多个监测点
    int currentPoint;
    
    void Start()
    {
        agent = GetComponent<NavMeshAgent>();
        agent.SetDestination(Points[0].position);//通过Nav Mesh Agent组件的SetDestination 方法括号内为一个Vector3目标点
    }

    void Update()
    {
        if(agent.remainingDistance<agent.stoppingDistance)//到目标的剩余距离是否小于之前在 Inspector窗口中设置的停止距离
        {         
            currentPoint=(currentPoint+1)%Points.Length;//采用取余的方法实现敌人巡逻轨迹的循环
            agent.SetDestination(Points[currentPoint].position);
        }
    }
}

给角色添加脚本同时将Nev Mesh Agent拖拽进Agent

unity3d 通过Nav Mesh Agent组件实现敌人巡逻以及有关“SetDestination”报错问题解决

并且添加两个Point点,在Hierarchy面板上添加两个空物体,并且命名pos1,pos2,贴上标签方便摆放。

unity3d 通过Nav Mesh Agent组件实现敌人巡逻以及有关“SetDestination”报错问题解决

 unity3d 通过Nav Mesh Agent组件实现敌人巡逻以及有关“SetDestination”报错问题解决

 这里也有一个需要注意,pos1,pos2的Y轴的值尽量与地面的Y轴贴近,不然导航的时候会出现角色乱走的情况。这里可能会有疑问,敌人的移动脚本??通过这个组件无需编写移动脚本,运动的速度转向等都在组件中设置即可,这里只需要添加一个带移动动画的敌人就可以了。当你运行,unity3d 通过Nav Mesh Agent组件实现敌人巡逻以及有关“SetDestination”报错问题解决

 "GetRemainingDistance" can only be called on an active agent that has been placed on a NavMesh!

这个让人懵的错误要引入NavMesh的动态烘培的概念,首先将创建的所有地形及环境物体(带碰撞)全部存放到名为Environment的空物体同时进行以下操作:

在Inspector中下拉Static并选择Navigation Static:

unity3d 通过Nav Mesh Agent组件实现敌人巡逻以及有关“SetDestination”报错问题解决

 接下来点击Window->AI->Navigation出现以下面板:

unity3d 通过Nav Mesh Agent组件实现敌人巡逻以及有关“SetDestination”报错问题解决

Agent Radius(网格与地形边缘的距离)

Agent Height(可以通过的最大高度)

Max Slope(可以通过的最大坡度)

step Height(可以通过的最大梯度)

 Drop Height(允许下落距离)  Jump Height(允许跳跃距离)

一般使用默认的值点击Bake烘培即可,接下来出现:

unity3d 通过Nav Mesh Agent组件实现敌人巡逻以及有关“SetDestination”报错问题解决

 就完成敌人巡逻功能了,运行起来吧。文章来源地址https://www.toymoban.com/news/detail-428857.html

到了这里,关于unity3d 通过Nav Mesh Agent组件实现敌人巡逻以及有关“SetDestination”报错问题解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Unity3D】获取子组件方法汇总

    一、遍历获取一级子组件(不包括子组件的子组件) 二、获取所有子组件(包括子组件的子组件)   三、通过数组下标获取指定子组件

    2024年02月11日
    浏览(48)
  • 【unity3D】Collider碰撞器组件

    💗 未来的游戏开发程序媛,现在的努力学习菜鸡 💦本专栏是我关于游戏开发的学习笔记 🈶本篇是unity的Collider碰撞器组件 名称 说明 Box Collider 盒装碰撞器 Box Collider 2D 2D盒装碰撞器 Capsule Collider 胶囊碰撞器 Capsule Collider 2D 2D胶囊碰撞器 Circle Collider 圆形碰撞器 Composite Collid

    2024年02月06日
    浏览(59)
  • 【小沐学Unity3d】Unity播放视频(VideoPlayer组件)

    使用视频播放器组件可将视频文件附加到游戏对象,然后在运行时在游戏对象的纹理上播放。 视频播放器 (Video Player) 组件: 属性 功能 Source 选择视频源类型。Video Clip:将视频剪辑分配给视频编辑器。使用此字段来定义分配给视频播放器组件的视频剪辑。将视频文件拖放到此

    2024年02月14日
    浏览(37)
  • 【unity3D】Dropdown组件 — 如何使用下拉菜单

    💗 未来的游戏开发程序媛,现在的努力学习菜鸡 💦本专栏是我关于游戏开发的学习笔记 🈶本篇是unity的Dropdown组件 介绍:Unity的Dropdown组件是一种UI控件,用于在下拉列表中显示选项或选项组。它允许用户从列表中选择一个选项,并可以在选择时触发特定的行为或事件。通

    2024年02月06日
    浏览(68)
  • Flutter通过flutter_unity_widget嵌入Unity3D

    实现方案:采用flutter开源组件flutter_unity_widget 1、创建flutter项目flutter_unity_demo 2、在pubspec.paml文件dependencies添加flutter_unity_widget: ^2022.2.0,执行Pub get导入组件 3、在工程目录下创建unity文件夹 4、在unity目录下创建unity_demo的3D工程 5、下载flutter_unity_widget提供的unity插件 在unity_d

    2024年02月11日
    浏览(44)
  • 【虚拟仿真】Unity3D打包WEBGL后播放视频(VideoPlayer组件)

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师 ☆恬静的小魔龙☆ ,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 本篇文章实现Unity3D打包WEBGL后播放视频,如下图所示: 使用了VideoPlayer组件,代码比较简单。 主要就

    2023年04月25日
    浏览(61)
  • [unity3d][通过代码]让模型移动,动态改变模型位置,点对点移动

    阅读时长 : 10分钟 阅读难度 : 初级 阅读收获 : 可以在unity自由的完成点对点的移动过程 例子地址 : https://gitee.com/asiworld/unity3d-basic-function-code 直接修改 gameobject 的 position 内容,当然物体实际存在的有localposition和worldposition,具体要使用哪个要看需求是怎么样的 在hierarchy视图中创

    2023年04月24日
    浏览(59)
  • 【unity3D】水平方向上UI自动排列整齐(Horizontal Layout Group组件)

    💗 未来的游戏开发程序媛,现在的努力学习菜鸡 💦本专栏是我关于游戏开发的学习笔记 🈶本篇是unity的Horizontal Layout Group 属性 功能 padding 布局组边缘内的填充 Spacing 布局元素之间的间距 Child Alignment 用于子布局元素的对齐方式 Reverse Arrangement 是否反向排列 Child Controls Siz

    2024年02月16日
    浏览(40)
  • Unity3D通过代码修改RGB值来控制UI与物体的Color颜色

    在实际应用过程中,经常有需要将某一物体颜色修改成特定颜色的情况,此时Color中自带的颜色就不够用了,此时我们就需要通过用代码修改RGB值来控制颜色。 下面以修改TextMeshProUGUI的字体颜色为例 这样直接运行,无论Color后的括号里是什么样的参数,字体颜色大概率为白色

    2024年02月11日
    浏览(64)
  • Unity3D实现给3D物体添加文本标签

    本教程将向您展示如何通过编写脚本来实现在Unity3D中给3D物体添加文本标签的通用方法。了解如何创建文本标签预制体,并通过编写脚本将其添加到3D物体上,以提供更多信息或标识物体。

    2024年02月04日
    浏览(179)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包