Unity 3D 人形角色动画(Avatar)||Unity 3D 导航系统||Unity 3D 障碍物

news2024/11/23 3:39:13

Unity 3D 人形角色动画(Avatar)

Mecanim 动画系统适合人形角色动画的制作,人形骨架是在游戏中普遍采用的一种骨架结构。。

由于人形骨架在骨骼结构上的相似性,用户可以将动画效果从一个人形骨架映射到另一个人形骨架,从而实现动画重定向功能。

除了极少数情况之外,人物模型均具有相同的基本结构,即头部、躯干、四肢等。

Mecanim 动画系统正是利用这一点来简化骨架绑定和动画控制过程。

创建模型动画的一个基本步骤就是建立一个从 Mecanim 动画系统的简化人形骨架到用户实际提供的骨架的映射,这种映射关系称为 Avatar

创建Avatar

在导入一个角色动画模型之后,可以在 Import Settings 面板中的 Rig 选项下指定角色动画模型的动画类型,包括 LegacyGeneric 以及 Humanoid 3 种模式。

  1. Legacy 与 Generic

Unity 3D 的 Mecanim 动画系统为非人形动画提供了两个选项:Legacy(旧版动画类型)和 Generic(一般动画类型)

旧版动画使用 Unity 4.0 版本文前推出的动画系统。一般动画仍可由 Mecanim 系统导入,但无法使用人形动画的专有功能。

非人形动画的使用方法是:

  • 在 Assets 文件夹中选中模型文件。

  • 在 Inspector 视图中的 Import Settings 属性面板中选择 Rig 标签页

  • 单击 Animation Type 选项右侧的列表框,选择 Generic 或 Legacy 动画类型即可。

  1. Humanoid

要使用 Humanoid(人形动画),单击 Animation Type 右侧的下拉列表,选择 Humanoid,然后单击 Apply 按钮Mecanim 动画系统会自动将用户所提供的骨架结构与系统内部自带的简易骨架进行匹配。

如果匹配成功,Avatar Definition 下的 Configure 复选框会被选中,同时在 Assets 文件夹中,一个 Avatar 子资源会被添加到模型资源中。

配置Avatar

Unity 3D 中的 Avatar 是 Mecanim 动画系统中极为重要的模块,正确地设置 Avatar 非常重要。

不管 Avatar 的自动创建过程是否成功,用户都需要到 Configure Avatar 界面中确认 Avatar 的有效性,即确认用户提供的骨骼结构与 Mecanim 预定义的骨骼结构已经正确地匹配起来,并已经处于 T 形姿态

单击 Configure 按钮后,编辑器会要求保存当前场景,因为在 Configure 模式下,可以看到 Scene 视图(而不是 Game 视图)中显示出当前选中模型的骨骼、肌肉、动画信息以及相关参数。

在这个视图中,实线圆圈表示的是 Avatar 必须匹配的,而虚线圆圈表示的是可选匹配的。

人形动画重定向

在 Mecanim 动画系统中,人形动画的重定向功能是非常强大的,因为这意味着用户只要通过很简单的操作就可以将一组动画应用到各种各样的人形角色上。

由于动画重定向功能只能应用到人形模型上,所以为了保证应用后的动画效果,必须正确地配置Avatar

Unity 3D 导航系统 

过去,游戏开发者必须自己打造寻路系统,特别是在基于节点的寻路系统中,必须手动地在 AI 使用的点之间进行导航,因此基于节点系统的寻路非常烦琐。

Unity 3D 不仅具有导航功能,还使用了导航网格(navigation meshes),这比手动放置节点更有效率而且更流畅。

更重要的是,还可以一键重新计算整个导航网格,彻底摆脱了手动修改导航节点的复杂方法。

1) 设置 NavMesh

NavMesh 的设置方法很简单,在 Hierarchy 视图中选中场景中除了目标和主角以外的游戏对象,在 Inspector 视图中单击 Static 下拉列表,在其中勾选 Navigation Static 即可

2) 烘焙

执行菜单 Window→Navation 命令,打开导航窗口,单击右下角的 Bake(烘焙)按钮即可,烘焙后的场景接下来详细看看 Navigation 面板,它有 Object、Bake、Areas 这 3 个标签页。

其中,Object 标签页如下图所示,该标签页可以设置游戏对象的参数,如下表所示。当选取游戏对象后,可以在此标签页中设置导航相关参数。

参 数功 能
Navigation Static勾选后表示该对象参与导航网格的烘焙
Generate OffMeshLinks勾选后可在导航网格中跳跃(Jump)和下落(Drop)
Navigation Area导航区域

Bake 标签页如下图所示,是 Navigation 面板最重要的标签页,在该标签页下可以设置导航代理相关参数以及烘焙相关参数,参数说明如下表所示。

参 数功 能
Agent Radius设置具有代表性的物体半径,半径越小,生成的网格面积越大
Agent Height设置具有代表性的物体的高度
Max Slope设置斜坡的坡度
Step Height设置台阶高度
Drop Height设置允许最大的下落距离
Jump Distance设置允许最大的跳跃距离
Manual Voxel Size设置是否手动调整烘焙尺寸
Voxel Size设置烘焙的单元尺寸,控制烘焙的精度
Min Region Area设置最小区域
Height Mesh设置当地形有落差时是否生成精确而不是近似的烘焙效果

3) 设置导航代理

导航代理(Navigation Agent)可以理解为去寻路的主体。

在导航网格生成之后,给游戏对象添加了一个 Nav Mesh Agent 组件,如下图所示。

Nav Mesh Agent 面板中各导航代理参数含义如下表所示。

属性分区参 数功 能
Agent SizeRadius设置导航代理的半径
Height设置导航代理的高度
Base Offset设置圆柱体相对于本地坐标的偏移
SteeringSpeed设置最大移动速度
Angular Speed设置最大角速度
Acceleration设置最大加速度
Stopping Distance设置离目标距离还有多远时停止
Auto Braking激活时,到达目标位置前将减速
Obstacle AvoidanceQuality设置躲避障碍物的质量,如果设置为0则不躲避其他导航 代理
Priority设置自身的导航优先级,范围是0〜99,值越小,优先级 越大
Path FindingAuto Traverse Off Mesh Link设置是否采用默认方式经过链接路径
Auto Repath设置当现有的路径变为无效时是否尝试获取一个新的路径
Area Mask设置此导航代理可以行走哪些区域类型

实践案例:自动寻路

案例构思

使用 Unity 3D 开发游戏,自动寻路可以有很多种实现方式。A 星寻路是一种比较传统的人工智能算法,在游戏开发中比较常用。

另外,Unity 3D 官方内置的寻路插件 Navmesh 也可以实现自动寻路功能。

本案例旨在通过一个简单的三维场景漫游实现 Navmesh 自动寻路插件的使用。

案例设计

本案例在 Unity 3D 内创建一个简单的三维场景,场景内有各种障碍,通过 Navmesh 插件可以自动寻找到目标位置。

案例实施

步骤 1):新建三维场景,将其命名为 Navigation。其中,胶囊体作为动态移动的对象,球体作为导航的目标

步骤 2):选中场景中所有除了 sphere、cylinder 摄像机以及直线光以外的所有物体,单击 Inspector 面板中右上角的 Navigation Static,使这些物体成为静态物体,并设置成 Navigation Static 类型,如下图所示。 

步骤 3):执行菜单栏中的 Window→Navigation 命令,Navigation 面板

步骤 4):单击该面板右下角的 Bake 按钮,即可生成导航网格

步骤 5):下面就可以让一个胶囊体根据一个导航网格运动到目标 Sphere 位置。执行 Component→Navigation→Nav Mesh Agent 为该胶囊体挂载一个 Nav Mesh Agent

步骤 6):最后写一个脚本就可以实现自动寻路了。创建 C# 脚本,将其命名为 DemoNavigation,脚本如下: 纯文本复制

 
  1. using UnityEngine;
  2. using System.Collections;
  3. public class DemoNavigation:MonoBehaviour{
  4. public Transform target;
  5. void Start(){
  6. if(target!=null){
  7. this.gameObject.GetComponent<NavMeshAgent>().destination=target.position;
  8. }
  9. }
  10. }

步骤 7):脚本新建完成后挂载到胶囊体上,然后将 Sphere 赋予胶囊体的 Navigation 脚本,运行场景,如下图所示,胶囊体会运动到 Sphere 的位置。

Unity 3D 障碍物

Nav Mesh Obstacle) 一般来说,不可攀爬的 Nav Mesh 都被视为障碍物(Nav Mesh Obstacle),也可以直接将物体设为障碍物,即可以为游戏对象添加 Nav Mesh Obstacle 组件。

有别于普通的 Nav Mesh,Nav Mesh Obstacle 是一种不需要烘焙的障碍物,形状可以选择为立方体或胶囊体。

实践案例:障碍物绕行

案例构思

在自动寻路过程中,往往会遇到障碍物,在寻路过程中遇到障碍物要怎样解决呢?

Unity 官方内置的寻路插件 Navmesh 完美地解决了这个问题。

本案例通过一个简单的有障碍的场景,实现自动寻路中障碍物绕行功能。

案例设计

本案例在 Unity 3D 内创建一个有障碍的场景,场景内有一个 Cube 用来充当障碍物,通过 Navmesh 插件实现主角遇到障碍物时自动绕行效果。 案例实施 步骤 1):执行 File→Save Scene as 命令,将 Navigation 场景另存为 Obstacle 场景,如下图所示。

 步骤 2):执行 GameObject→3D Object→Cube 命令新建一个障碍物,将其放置在主角的前方,并赋予黑色材质,如下图所示。

步骤 3):执行 Component→Navigation→Nav Mesh Obstacle 命令添加 Nav Mesh Obstacle 组件,如下图所示。

步骤 4):单击 Play 按钮进行测试,可以发现主角会绕过黑色立方体并到达终点,效果如下图所示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/165640.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Java+SpringBoot+Vue求职招聘系统设计与实现

博主介绍&#xff1a;✌全网粉丝3W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供毕业项目实战✌ 博主作品&#xff1a;《微服务实战》专栏是本人的实战经验总结&#xff0c;《Spring家族及微服务系列》专注…

《Buildozer打包实战指南》第一节 在虚拟机中安装Ubuntu系统

目录 1.1 下载并安装Virtual Box虚拟机 1.2 下载并安装Ubuntu系统 由于Buildozer不能在Windows系统上打包&#xff0c;只能运行于Linux&#xff0c;所以我们可以在Windows系统上安装一个虚拟机&#xff0c;并在虚拟机中安装Linux。在本教程中笔者将会一直使用Ubuntu系统&…

大数据分案例-基于随机森林算法构建返乡人群预测模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

ubuntu16.04安装verilator+systemc并运行测试程序

link Verilator 能够把可综合的&#xff08;通常不是行为级&#xff09;的Verilog代码&#xff0c;外加一部分Synthesis&#xff0c;SystemVerilog和一小部分Verilog AMS代码转换成C或者SystemC代码。Verilator不是一个完整的模拟器&#xff08;simulator&#xff09;&#xff…

打工人必学的法律知识(六)——《劳动法》案例-差绩效不等于「不能胜任工作」

目录 一、差绩效不等于「不能胜任工作」 二、劳动者无条件解除劳动合同的情形 一、差绩效不等于「不能胜任工作」 员工在用人单位等级考核中居于末位等次&#xff0c;不等同于“不能胜任工作”&#xff08;最高人民法院指导案例18号&#xff09; 2005年7月&#xff0c;被告王…

【Linux】Linux多线程(上)

前言 hi~ 大家好呀&#xff0c;欢迎来到我的Linux学习笔记。本篇笔记将会重点从内核结构引入Linux下的线程&#xff0c;理解Linux下线程和进程的相关性和区别&#xff0c;以及线程相关的操作方法&#xff0c;在到之后的线程互斥和线程同步中的条件变量相关概念哦~ Linux进程控…

世界杯数据可视化分析

目录 1.数据来源 2.字段解释 世界杯成绩信息表&#xff1a;WorldCupsSummary 世界杯比赛比分汇总表&#xff1a;WorldCupMatches.csv 世界杯球员信息表&#xff1a;WorldCupPlayers.csv 3.数据分析及可视化 世界杯已经告一段落&#xff0c;作为一个学习大数据的学生&…

CentOS即将停止维护,拥抱阿里“龙蜥“(Anolis OS),VMware安装Anolis OS与介绍

一、前言 大家在自己电脑来进行服务器的一些操作时&#xff0c;基本都是使用CentOS 7或者是CentOS 8&#xff0c;但是2021年底CentOS 8宣布停止了维护&#xff1b;CentOS 7 在2024年6月30日也会停止维护&#xff01; 所以我们是时候换一个操作系统了&#xff0c;经过十几年的…

[319]. 灯泡开关

[319]. 灯泡开关题目算法设计&#xff1a;完全平方数题目 传送门&#xff1a;https://leetcode.cn/problems/bulb-switcher/ 算法设计&#xff1a;完全平方数 问题是有多少灯是亮的。 那怎么样灯才会亮呢&#xff1f; 点偶数次相当于没点&#xff0c;开了又关。只有点奇…

标准库中的string类

深爱学习的你&#xff0c;在很多场景下一定经常和字符串打交道&#xff01; 字符串是以‘\0’结尾的字符合集&#xff0c;C语言中提供了一些库函数来处理字符串,让大家在写代码的过程中方便了许多&#xff1a; 字符串函数_Bug程序员小张的博客-CSDN博客字符串函数https://blog…

基于Simulink的带通BPSK信号调制解调实验报告(含代码和slx文件)

重要声明:为防止爬虫和盗版贩卖,文章中的核心代码和数据集可凭【CSDN订阅截图或公z号付费截图】私信免费领取,一律不认其他渠道付费截图! 摘要 数字相位调制又称为相移键控(Phase Shift Keying,PSK),是一种十分重要的基本数字调制技术,是一种用载波相位表示输入信号…

磨金石教育摄影技能干货分享|有哪些风格独特的摄影作品

1 奋勇向前照片中退却的海浪与冲上岸的海浪交汇拍打&#xff0c;形成大量的白色泡沫。于是画面被平均分成两部分&#xff0c;分割线由左上延伸到右下&#xff0c;一条明显的对角线。也让画面形成对称式的构图&#xff0c;所以照片看着既平衡又美观。作者给照片起名为《奋勇向前…

Docker安装MySQL、MySQL主从复制、双主双从

文章目录Docker安装MySQL新建容器配置,记得 重启加载配置&#xff01;测试MySQL 主从复制原理新增两个mysql,一主一从在主机上在从机上MySQL双主双从必看&#xff01;创建容器在两个主机上在两个从机上问题解决Navicat无法连接MySQL的问题WARNING: IPv4 forwarding is disabled…

计算机网络概况

1 前言计算机网络是指将位于不同地理位置&#xff0c;但具有独立功能的多台设备&#xff0c;通过通信设备和线路连接起来&#xff0c;在网络操作系统&#xff0c;网络管理软件、网络通信协议的协调管理下&#xff0c;实现资源共享和信息传递的计算机系统。简单来说&#xff0c;…

智慧农业灌溉系统-数字农业-农业物联网机井灌溉节水新模式

平升电子智慧农业灌溉系统/农业物联网机井灌溉系统&#xff0c;可实现井电双控&#xff08;以电控水&#xff09;、以电折水、以阀控水等各种形式的地下取水井用水计量监测控制需求&#xff0c;助推农业水价改革实施、高效节水灌溉和地下水超采综合治理&#xff0c;促进节水型社…

Python数学建模问题总结(2)数据可视化Cookbook指南·上

概括总结&#xff1a;一、可视化问题1.不会可视化图标&#xff1b;2.可视化效果不好看&#xff1b;3.数据可视化成果无法得到很好的推广使用。二、可视化原则准确的、有帮助的、可扩展的。三、类型1.随时间变化&#xff1b;2.类别比较图表&#xff1b;3.排名列表&#xff1a;有…

proc文件系统下各参数解析

文章目录一、proc文件系统1.1 /proc/[pid]1.1.1 /proc/[pid]/arch_status1.1.2 /proc/[pid]/attr1.1.2.1 /proc/[pid]/attr/current1.1.2.2 /proc/[pid]/attr/exec1.1.2.3 /proc/[pid]/attr/fscreate1.1.2.4 /proc/[pid]/attr/keycreate1.1.2.5 /proc/[pid]/attr/prev1.1.2.6 /…

【操作系统】 第一章 操作系统概述

文章目录第一章 知识体系1.1 操作系统的基本概念1.1.1 操作系统的概念1.1.2 操作系统的特征1.1.3 操作系统的目标和功能1.2 操作系统的发展历程1.3 操作系统的运行环境1.3.1 处理器的运行模式1.3.2 中断和异常的概念1.3.3 系统调用1.4 操作系统结构1.5 操作系统引导1.6 虚拟机第…

C++进阶 红黑树封装map和set

作者&#xff1a;小萌新 专栏&#xff1a;C进阶 作者简介&#xff1a;大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;使用红黑树封装出map和set 红黑树封装map和set红黑树源代码红黑树模板参数的控制红黑树结点当中存储的数据模板参数仿函数的增加正向迭…

react基础Day04-React原理揭秘React路由基础

React原理揭秘 目标 能够说出React组件的更新机制能够对组件进行性能优化能够说出虚拟DOM和DIff算法 组件更新机制 setState() 的两个作用 修改state更新组件 过程&#xff1a;父组件重新渲染时&#xff0c;也会重新渲染子组件&#xff0c;但只会渲染当前组件子树&#xff…