【Unity技术积累】鼠标控制人物移动 导航系统 动画
使用导航系统来实现鼠标点击控制人物移动
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技术积累】鼠标控制人物移动 导航系统 动画相关推荐
- Unity 基础 之 鼠标控制 相机(摄像机Camera)的旋转,移动和 fov 的简单使用整理
Unity 基础 之 鼠标控制 相机(摄像机Camera)的旋转,移动和 fov 的简单使用整理 目录 Unity 基础 之 鼠标控制 相机(摄像机Camera)的旋转,移动和 fov 的简单使用整理 ...
- 【Unity技术积累】人物移动 坦克式移动 WASD 动画
此笔记中的人物移动对标RPG游戏中的人物移动 首先,要知道什么是坦克式移动,个人的理解是通过不同的按键来决定人物的移动方向,想要向前走就要按下规定的按键,人物就会转向规定的方向再进行移动. 接下来就是 ...
- 【Unity3DRPG入门学习笔记第五卷】MouseManager 鼠标控制人物移动
创建一个空物体用来管理鼠标脚本 添加脚本 MouseManager.cs 示例代码: using System.Collections; using System.Collections.Generi ...
- 【Unity技术积累】实现鼠标画线功能 LineRenderer
using System.Collections; using System.Collections.Generic; using UnityEngine;public class Painting ...
- 【Unity】通过鼠标控制相机视角(拉近拉远/选择角度)
今天优化项目的时候,发现观察物体的视角有些问题,所以就自己写了一些代码,同时参考了一些网上大佬们的写法,改了改,写出来了一篇如下的代码: 功能: 鼠标中间控制视角远近 鼠标右键控制视角旋转 priva ...
- unity里移动鼠标控制物体的移动(2D)
例如2D游戏里帽子左右的移动: 对于帽子:先获取game视图屏幕的大小,再将其转换成世界坐标点,之后获取帽子的宽度,再计算帽子可移动大小 值 对于鼠标:将鼠标的位置转换为世界坐标位置, private ...
- Unity技术手册 - 鼠标键和常用name字符串和KeyCode枚举
往期文章分享 点击跳转=><导航贴>- Unity手册,系统实战学习 点击跳转=><导航贴>- Android手册,重温移动开发 本文约2.5万字,新手阅读需要17 ...
- 【Unity技术积累】使用协程实现地刺动画
使用协程实现路障动画效果. 路障本身是两个模型,我们要控制子模型进行上下位移. public class Spike : MonoBehaviour {private Transform splikO ...
- 【Unity技术积累】代码生成菱形地图
技术要点: Resources 资源加载 Quaternion 四元数 Mathf 数学计算 1. 通过Resources动态加载方块 首先在 Project 面板中创建 Resources 文件夹, ...
最新文章
- 表面缺陷检测数据集汇总及其相关项目推荐
- Linux中yum和apt-get
- paho mqtt 在某平台sdk应用上发送数据定时器超时问题
- SAP 月末结帐及年末结帐步骤
- 【Other】Ubuntu 14.04 pptp 客户端连接配置
- “2021ISIG中国产业智能大会低代码峰会”即将开幕,钉钉宜搭叶周全受邀出席
- Robot Framework-Ride界面介绍及库的添加
- oracle批量替换保留字,oracle保留字大全
- 计算机控制考试试卷及答案,计算机控制系统A考试试卷带答案.doc
- html天猫倒计时代码,怎么用JavaScript编写一个天猫上使用的倒计时?
- Java基础学习总结(162)——如何保证线程安全?
- Kerberos安装及拖管Ambari 2.7
- Mycat实战之配置EP分片
- Excel函数实战技巧精粹(六)如何在条件格式中使用函数
- 程序员到底要学什么?
- python opencv实现三角测量(triangulation)
- 初识霍夫变换——霍夫变换直线检测原理(Line Detection)
- python4delphi和tesserocr库安装配置
- 深入理解Java虚拟机(10-13)学习总结
- 微店小程序、微店系统怎么开发,流程步骤_OctShop