使用导航系统来实现鼠标点击控制人物移动

1. 导入素材

以小球机器人为例(Unity商店下载)

布置场景

2. 添加 Nav Mesh Agent 组件

更改红框里的参数即可

Steering 操纵
Speed 寻路时的最大移动速度
Angular Speed 寻路时的最大转向速度(最大角速度)。值越大,agent的转向越迅速。
Acceleration 当agent寻路时的最大加速度。单纯物理意义上的加速度,控制速度变化的快慢。
Stopping Distance 制动距离。当agent与目标点的距离小于它时会自动停下来以免越过目标点。
Auto Braking 该属性设置为true时,agent会在到达Stopping Distance时直接停下。否则会出现当agent速度太快冲过目标点时,会缓慢的回到目标点的现象。
Radius agent的躲避半径。相当于agent的私人空间,在这个半径内其它障碍或agent无法穿过。
Height agent的高度。低于该值的障碍agent都无法穿过。。
Quality 设置质量。我也不知道这个有什么用,设置成High Quality就好了。
priority 优先级。低优先级的agent会给高优先级的agent让路。

想详细了解全部参数是什么意思可以看此文章!
https://blog.csdn.net/qq_37701948/article/details/105875160

3. 使用Navigation烘焙场景

打开Navigation面板

点击 Window - 点击倒是第二个 AI - 点击 Navigation

打开面板后按照以下操作进行设置


确保 Navigation Static 有被勾选

点击 Bake 开始烘焙


蓝色区域代表烘焙的区域

关于 Navigation 更多内容请看此
http://c.biancheng.net/view/2772.html

给Plane添加标签!

默认没有 Ground 标签,需要点 Add Tag 后点击 添加一个哦!

4. 敲移动代码!

创建 PlayerMove 脚本并拖给机器人

using UnityEngine.AI //需要添加命名空间才能调用NavMeshAgent public class PlayerMove : MonoBehaviour
{// 用于从射线投射获取信息RaycastHit hitInfo;private NavMeshAgent agent;private void Start(){agent = GetComponent<NavMeshAgent>();}private void Update(){// 创建从摄像机往鼠标点击的位置发射射线Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);// 返回射线碰撞的物体的信息Physics.Raycast(ray, out hitInfo);// 鼠标右键点击且点击到的物体有碰撞体if (Input.GetMouseButtonDown(1) && hitInfo.collider != null){// 判断点击到的是地板if (hitInfo.collider.gameObject.CompareTag("Ground")){// 人物移动到点击到的坐标点agent.destination = hitInfo.point;}}}
}
官方API链接

Ray
Camera.ScreenPointToRay
RaycastHit
Physice.Raycast

6. 添加动画

创建 Animator Controller

拖给机器人并双击点开

创建 Blend Tree(混合树),创建后系统会默认执行

双击 Blend Tree 进入

左边添加一个 Float 类型的参数,命名为 Speed

点击 号添加两个参数

拖拽 Idle动画Walk动画,注意动画是三角形符号的哦!

Parameter 设置成之前设置过的 Speed

在脚本中添加代码控制动画

Update 中添加

anim.SetFloat("Speed", agent.velocity.sqrMagnitude);

NavMeshAgent.velocity
Vector3.sqrMagnitude

完整代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class PlayerMove : MonoBehaviour
{// 用于从射线投射获取信息RaycastHit hitInfo;private NavMeshAgent agent;private Animator anim;private void Start(){agent = GetComponent<NavMeshAgent>();anim = GetComponent<Animator>();}private void Update(){// 创建从摄像机往鼠标点击的位置发射射线Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);// 返回射线碰撞的物体的信息Physics.Raycast(ray, out hitInfo);// 鼠标右键点击且点击到的物体有碰撞体if (Input.GetMouseButtonDown(1) && hitInfo.collider != null){// 判断点击到的是地板if (hitInfo.collider.gameObject.CompareTag("Ground")){// 人物移动到点击到的坐标点agent.destination = hitInfo.point;}}anim.SetFloat("Speed", agent.velocity.sqrMagnitude);}}

个人积累,有错误请多多包涵~
能帮到你是我的荣幸~

【Unity技术积累】鼠标控制人物移动 导航系统 动画相关推荐

  1. Unity 基础 之 鼠标控制 相机(摄像机Camera)的旋转,移动和 fov 的简单使用整理

    Unity 基础 之 鼠标控制 相机(摄像机Camera)的旋转,移动和 fov 的简单使用整理 目录 Unity 基础 之 鼠标控制 相机(摄像机Camera)的旋转,移动和 fov 的简单使用整理 ...

  2. 【Unity技术积累】人物移动 坦克式移动 WASD 动画

    此笔记中的人物移动对标RPG游戏中的人物移动 首先,要知道什么是坦克式移动,个人的理解是通过不同的按键来决定人物的移动方向,想要向前走就要按下规定的按键,人物就会转向规定的方向再进行移动. 接下来就是 ...

  3. 【Unity3DRPG入门学习笔记第五卷】MouseManager 鼠标控制人物移动

    创建一个空物体用来管理鼠标脚本 添加脚本 MouseManager.cs 示例代码: using System.Collections; using System.Collections.Generi ...

  4. 【Unity技术积累】实现鼠标画线功能 LineRenderer

    using System.Collections; using System.Collections.Generic; using UnityEngine;public class Painting ...

  5. 【Unity】通过鼠标控制相机视角(拉近拉远/选择角度)

    今天优化项目的时候,发现观察物体的视角有些问题,所以就自己写了一些代码,同时参考了一些网上大佬们的写法,改了改,写出来了一篇如下的代码: 功能: 鼠标中间控制视角远近 鼠标右键控制视角旋转 priva ...

  6. unity里移动鼠标控制物体的移动(2D)

    例如2D游戏里帽子左右的移动: 对于帽子:先获取game视图屏幕的大小,再将其转换成世界坐标点,之后获取帽子的宽度,再计算帽子可移动大小 值 对于鼠标:将鼠标的位置转换为世界坐标位置, private ...

  7. Unity技术手册 - 鼠标键和常用name字符串和KeyCode枚举

    往期文章分享 点击跳转=><导航贴>- Unity手册,系统实战学习 点击跳转=><导航贴>- Android手册,重温移动开发 本文约2.5万字,新手阅读需要17 ...

  8. 【Unity技术积累】使用协程实现地刺动画

    使用协程实现路障动画效果. 路障本身是两个模型,我们要控制子模型进行上下位移. public class Spike : MonoBehaviour {private Transform splikO ...

  9. 【Unity技术积累】代码生成菱形地图

    技术要点: Resources 资源加载 Quaternion 四元数 Mathf 数学计算 1. 通过Resources动态加载方块 首先在 Project 面板中创建 Resources 文件夹, ...

最新文章

  1. 表面缺陷检测数据集汇总及其相关项目推荐
  2. Linux中yum和apt-get
  3. paho mqtt 在某平台sdk应用上发送数据定时器超时问题
  4. SAP 月末结帐及年末结帐步骤
  5. 【Other】Ubuntu 14.04 pptp 客户端连接配置
  6. “2021ISIG中国产业智能大会低代码峰会”即将开幕,钉钉宜搭叶周全受邀出席
  7. Robot Framework-Ride界面介绍及库的添加
  8. oracle批量替换保留字,oracle保留字大全
  9. 计算机控制考试试卷及答案,计算机控制系统A考试试卷带答案.doc
  10. html天猫倒计时代码,怎么用JavaScript编写一个天猫上使用的倒计时?
  11. Java基础学习总结(162)——如何保证线程安全?
  12. Kerberos安装及拖管Ambari 2.7
  13. Mycat实战之配置EP分片
  14. Excel函数实战技巧精粹(六)如何在条件格式中使用函数
  15. 程序员到底要学什么?
  16. python opencv实现三角测量(triangulation)
  17. 初识霍夫变换——霍夫变换直线检测原理(Line Detection)
  18. python4delphi和tesserocr库安装配置
  19. 深入理解Java虚拟机(10-13)学习总结
  20. 微店小程序、微店系统怎么开发,流程步骤_OctShop

热门文章

  1. ZOJ-3802:Easy 2048 Again(2048游戏 状态压缩dp)
  2. 渲染管线流程【图示】
  3. 经典的webshell提权
  4. 传统组学模块:乳腺肿瘤良恶性预测
  5. js的图片渐渐入渐渐出的效果(html逻辑 css逻辑 js逻辑))
  6. 如何打开电脑的服务选项
  7. 年度简报 | 回顾2021,展望2022
  8. js逆向,破解企名片网站的加密参数
  9. NeurIPS2019 | 17篇论文带你展望图机器学习发展趋势
  10. 常用office办公学习资源搜集