Mecanim动画系统

本期教程和大家分享Mecanim动画系统的重定向特性,Mecanim动画系统是Unity3D推出的全新的动画系统,具有重定向、可融合等诸多新特性,通过和美工人员的紧密合作,可以帮助程序设计人员快速地设计出角色动画。一起跟着人气博主秦元培学习吧!
博主今天想和大家分享的是Mecanim动画系统的重定向特性,众所周知,《仙剑奇侠传》是一部经典的RPG游戏,这部游戏到今天依然焕发着强大的生命力。博主在网上认识了一个制作《仙剑奇侠传》同人游戏的小团队,他们目前正在着手制作一个称为《仙剑奇侠传五外传:心愿》的同人游戏,该游戏基于Unity3D,由于技术上的一致性,博主向他们索取了一些游戏素材,而这成为了博主决心要研究Mecanim动画系统的一个主要原因。如图是《仙剑奇侠传五前传》中瑕的一个模型:

1

拿到这个模型的时候,博主发现这个模型的所有动画都是放在一个AnimationClip中的,所以博主果断将这个动画文件进行了分割,分割的方法是在资源目录中找到这个AnimationClip,然后在右侧的属性窗口中选择Animations选项卡中通过+号来新建一个AnmationClip,在指定了起点帧数和终点帧数后就实现对动画的分割。如图示博主经过分割后的动画文件列表:

2

可以看到这里博主将一个动画片段分割成了4个动画片段,这样我们就可以通过Animation组件来实现对动画的播放。而这正是在Mecanim动画系统推出之前Unity3D采用的动画控制形式。由于这个模型在建模的时候存在问题,所以导致瑕在游戏场景中的角度出现错误,博主只好自己用3D建模软件进行调整,结果意外得发现瑕的模型中是有骨骼的,博主忽然间想到了一个问题,是否可以利用Mecanim动画系统来为这个模型添加动画呢?答案是肯定的。由于这个模型在建模的时候将动画和模型一起创建了,因此我们需要首先将这个动画从模型中去除,因为Mecanim动画系统的一个主要思路就是让一套动画可以通过重定向应用到不同的模型上,既然有动画可用,那么模型自带的动画可以暂时去除。而让动画从模型中去除的方法很简单,就是在导出FBX模型的时候将嵌入的媒体选项不要勾选,这样我们的模型就可以和动画分离开了,经过这一步后,我们正式开始Mecanim动画系统的讲解。要理解Mecanim动画系统,首先需要了解这样几个概念:
一、Avater,即阿凡达,这是Mecanim动画系统中实现动画绑定的一个接口,该接口可以实现骨骼和肌肉系统的匹配,从而保证角色在执行动画的时候,角色能够按照预先设定的动画来运动。我们首先在项目资源窗口中找到了模型文件,如图:

3

我们注意到在右侧的属性窗口中有三个选项卡:Model、Rig、Animations。这里我们选择Rig选项卡,将Animation Type设为Humanoid,即双足类型的动画。这种类型可以支持大多数的类人形的模型。此外,Lagacy类型用来兼容Unity3D低版本中的模型动画,Generic类型是一种介于人形和非人形的模型之间的通用类型。我们选择Humanoid类型后,在下方选择生成Avater的类型诶Create Form This Model,即通过当前的模型来生成一个Avater。此时,Configure按钮由不可用状态变成可用状态,我们点击该按钮,如果我们没有保存游戏场景的话,此时Unity3D会提示我们保存场景,我们直接选择保存,接下来回打开一个新的场景,如图:

4

此时场景中会显示模型的骨骼结构,对应地,在右侧窗口中显示了该模型主要的身体结构,可以看到此时右侧窗口中所有的点都是以绿色显示的,这表示当前模型的骨骼关节和模型匹配正确。此时,我们可以切换到Muscles选项卡中,这是我们可以通过拖动滑块来检查模型匹配是否正确。在使用Avater的时候,有两点需要注意:
1、如果模型建模没有严重的错误的话,可以通过窗口底部的Mipping->AutoMap来实现对模型的自动匹配,这一点可以提高工作效率,但是作为一名有节操的开发人员,我们绝不能过度地依赖于这一功能。
2、当在手动调整模型匹配时,如果提示T-Pose错误,可以通过Pose->Enforce T-Pose来实现强制转化,博主最近才开始学习游戏建模,所以这里可能暂时无法解释清楚,大家就作为经验之谈来看吧。
确认模型匹配没有什么问题后,点击Done完成编辑。
二、AnimatorController:如果说Avater是将模型的身体和骨骼实现匹配的接口,那么AnimatorController就是讲动画和模型实现绑定的接口。我们这里创建一个XiaAnimaterController。双击该文件,会打开Animator窗口,如图:

5

博主这里不想详细介绍关于Unity3D动画系统中的状态机和混合树等概念,因为这些概念现在解释起来实在困难,博主打算放在下一篇文章中来详细的讲解Mecanim动画的状态机和混合树的概念。今天我们只是对Mecanim动画系统做一个初步的了解,因为要想彻底理解这个动画系统,绝非一朝一夕之功啊。博主在这里创建了6种动画状态,并通过带箭头的线条将它们连了起来。博主这里想实现什么功能呢?博主希望在一定条件下可以触发相应的条件,当出发结束后立即回到默认的状态,这里默认的状态是Idle。估计大家到这里会有点混乱,博主前面不是说这个模型没有动画的嘛,那么这个的动画是哪里来的呢?对此,博主这里做一下解释啊,博主在创建这个项目之前呢,提前准备了一个叫做WomanKnightAnimationPack的动画包,它提供了游戏中常用的动画,我们这里就是要通过Mecanim的重定向功能将这个动画运用到我们的模型上去,这个动画包可以从官方的资源商店中下载。好了,现在我们来讲解怎么讲动画和模型绑定,我们单击默认的Idle动画,在窗口右侧将会显示如下内容:

6

通过Motion文本框我们可以为当前的状态绑定一种动画,选中Foot IK和Mirror这两个选项,似乎可以解决角色在行走或者奔跑过程中出现的问题,可是博主在查API文档的时候并没有找到相关的解释,如果有朋友知道的话,希望可以告诉博主啊。类似地,我们可以为不同的状态绑定一个动画片段,可是问题马上又来了,我们如何按照游戏策划在适当地时候播放相应的动画呢?这就是动画的触发问题了,博主请大家想一想有限状态机的概念,如果不知道这个概念的,请自行了解,这是游戏设计中非常重要、非常有用的一个概念。我们知道在有限状态机中,无论我们使用switch-case结构还是if-else结构,都需要一个状态值来作为判断的依据,那么在Mecanim中这个原则依然适用。因为,Mecanim动画系统就是基于状态机的。好了,下面我们来创建一个状态值。如图,

7

在Mecanim动画系统中提供了四种类型的状态值,分别是Float、Int、Bool、Trigger,其中Trigger和OnTrigger()方法可以联用,实现触发式播放动画。好了,现在我们创建一个整型的状态值,默认值为0。我们首先选中Idle->Walk这条路线,在右侧的窗口中将参数设为ActionID,将值设为1,将方法设为Equals,其含义是当ActionID的取值为1时将执行Walk动画。同样地,我们将Walk->Idle这条路线选中,设将参数设为ActionID,将值设为0,将方法设为Equals,其含义是当ActionID的取值为1时将执行Idle动画。其余的动画状态参数和Walk设置方法相同,从Idle出发的线路依次为1,2,3,4,5,指向Idle的路线全部为0。现在我们将这个AnimatorController指定给场景中的模型,如图:

8

此时我们运行程序,由于我们已经为瑕指定了默认的动画,于是我们将看到:

9

虽然这个动画和我们的瑕妹子搭配得有点违和,但是我们已经初步掌握了使用Mecanim动画系统的方法,好了,下面我们来编写一段脚本来控制人物切换动画,因为只有默认动画是没有什么实际用途的:

10

11

最后我们一起来看实际的效果吧!

12

场景中的地形由Unity3D自带的地形工具创建,其实博主是想搭建一个《仙剑奇侠传五前传》中的云来石的场景,因为博主坚信,凭借瑾轩的智慧怎么会想不到在和瑕双双坠崖后召唤云来石呢,所以博主坚信他们俩都没有死,因为暮姐最后回眸的一瞬间表情是喜悦的,而背后传来了一急一慢两种脚步声,所以结局大家可以自己去想象啦。在同人游戏《仙剑奇侠传五后传:心愿》中他们策划的剧情和博主的基本一致,或许这就是《仙剑奇侠传》系列游戏之所以能让博主一直愿意乐观下去、努力下去的原因吧,我们都是普通人,可是我们并不是因为普通而普通,而是我们选择了不作为。以前博主听说过一款由仙剑玩家发起的游戏《仙剑奇侠传四:回到起点》,当时看到游戏的宣传动画时激动了好一阵子,可是到了后来这部游戏因为制作团队的解散而宣布停止,这似乎总让人想起上海软星的过去。细心的朋友一定发现了博主使用的素材是仙剑四中的模型,可以发现这个模型是较为简陋的,树木基本上是纸片拼成的,影子是在模型里创建的,当年弓长君带领上软制作仙剑三、仙剑三外传、仙剑四的艰难程度可窥一斑。不过目前由上软核心骨干组成的上海烛龙已经从当年的困境中走了出来,成为和大宇双剑抗衡的第三把剑。为何博主总是钟情于剑呢?因为剑的传说,直到永恒。

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

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

相关文章

【嵌入式硬件Esp32】Ubuntu 1804下ESP32交叉编译环境搭建

一、ESP32概述EPS32是乐鑫最新推出的集成2.4GWi-Fi和蓝牙双模的单芯片方案,采用台积电(TSMC)超低功耗的40nm工艺,拥有最佳的功耗性能、射频性能、稳定性、通用性和可靠性,适用于多种应用和不同的功耗要求。 ESP32搭载低功耗的Xtensa LX6 32bi…

你认为已经过时的C语言,是如何影响500万程序员的?...

看招聘职位要c语言的占比真不多了,是否c语言真得落伍了? 看一下许多招聘平台有关于找纯粹的c语言开发的占比确实没有很多,都被Java,php,python等等語言刷屏。这对于入门正在学习c语言的小白真他妈就是惊天霹雳&#xf…

云尚制片管理系统_电影制片厂的未来

云尚制片管理系统Data visualization is a key step of any data science project. During the process of exploratory data analysis, visualizing data allows us to locate outliers and identify distribution, helping us to control for possible biases in our data ea…

JAVA单向链表实现

JAVA单向链表实现 单向链表 链表和数组一样是一种最常用的线性数据结构,两者各有优缺点。数组我们知道是在内存上的一块连续的空间构成,所以其元素访问可以通过下标进行,随机访问速度很快,但数组也有其缺点,由于数组的…

201771010102 常惠琢《面向对象程序设计(java)》第八周学习总结

1、实验目的与要求 (1) 掌握接口定义方法; (2) 掌握实现接口类的定义要求; (3) 掌握实现了接口类的使用要求; (4) 掌握程序回调设计模式; (5) 掌握Comparator接口用法; (6) 掌握对象浅层拷贝与深层拷贝方法&#xff1b…

新版 Android 已支持 FIDO2 标准,免密登录应用或网站

谷歌刚刚宣布了与 FIDO 联盟达成的最新合作,为 Android 用户带来了无需密码、即可登录网站或应用的便捷选项。 这项服务基于 FIDO2 标准实现,任何运行 Android 7.0 及后续版本的设备,都可以在升级最新版 Google Play 服务后,通过指…

t-sne原理解释_T-SNE解释-数学与直觉

t-sne原理解释The method of t-distributed Stochastic Neighbor Embedding (t-SNE) is a method for dimensionality reduction, used mainly for visualization of data in 2D and 3D maps. This method can find non-linear connections in the data and therefore it is hi…

Android Studio如何减小APK体积

最近在用AndroidStudio开发一个小计算器,代码加起来还不到200行。但是遇到一个问题,导出的APK文件大小竟然达到了1034K。这不科学,于是就自己动手精简APK。下面我们大家一起学习怎么缩小一个APK的大小,以hello world为例。 新建工…

js合并同类数组里面的对象_通过同类群组保留估算客户生命周期价值

js合并同类数组里面的对象This is Part I of the two-part series dedicated to estimating customer lifetime value. In this post, I will describe how to estimate LTV, on a conceptual level, in order to explain what we’re going to be doing in Part II with the P…

C#解析HTML

第一种方法:用正则表达式来分析 [csharp] view plaincopy 转自网上的一个实例:所有的href都抽取出来: using System; using System.Net; using System.Text; using System.Text.RegularExpressions; namespace HttpGet { c…

com编程创建快捷方式中文_如何以编程方式为博客创建wordcloud?

com编程创建快捷方式中文Recently, I was in need of an image for our blog and wanted it to have some wow effect or at least a better fit than anything typical we’ve been using. Pondering over ideas for a while, word cloud flashed in my mind. 💡Us…

ETL技术入门之ETL初认识

ETL技术入门之ETL初认识 分类: etl2014-07-10 23:11 3021人阅读 评论(2) 收藏 举报数据仓库商业价值etlbi目录(?)[-] ETL是什么先说下背景知识下面给下ETL的详细解释定义现在来看下kettle的transformation文件一个最简单的E过程例子windows环境 上图左边的是打开表…

ActiveSupport::Concern 和 gem 'name_of_person'(300✨) 的内部运行机制分析

理解ActiveRecord::Concern: 参考:include和extend的区别: https://www.cnblogs.com/chentianwei/p/9408963.html 传统的模块看起来像: module Mdef self.included(base)# base(一个类)扩展了一个模块"ClassMethods", b…

Python 3.8.0a2 发布,面向对象编程语言

百度智能云 云生态狂欢季 热门云产品1折起>>> Python 3.8.0a2 发布了,这是 3.8 系列计划中 4 个 alpha 版本的第 2 个。 alpha 版本旨在更加易于测试新功能和 bug 修复状态,以及发布流程。在 alpha 阶段会添加新功能,直到 beta 阶…

基于plotly数据可视化_如何使用Plotly进行数据可视化

基于plotly数据可视化The amount of data in the world is growing every second. From sending a text to clicking a link, you are creating data points for companies to use. Insights that can be drawn from this collection of data can be extremely valuable. Every…

ESLint简介

ESLint简介 ESLint是一个用来识别 ECMAScript 并且按照规则给出报告的代码检测工具,使用它可以避免低级错误和统一代码的风格。如果每次在代码提交之前都进行一次eslint代码检查,就不会因为某个字段未定义为undefined或null这样的错误而导致服务崩溃&…

数据科学与大数据是什么意思_什么是数据科学?

数据科学与大数据是什么意思Data Science is an interdisciplinary field that uses a combination of code, statistical analysis, and algorithms to gain insights from structured and unstructured data.数据科学是一个跨学科领域,它结合使用代码,…

C#制作、打包、签名、发布Activex全过程

一、前言 最近有这样一个需求,需要在网页上面启动客户端的软件,软件之间的通信、调用,单单依靠HTML是无法实现了,因此必须借用Activex来实现。由于本人主要擅长C#,自然本文给出了用C#实现的范例,本文的预期…

用Python创建漂亮的交互式可视化效果

Plotly is an interactive Python library that provides a wide range of visualisations accessible through a simple interface.Plotly是一个交互式Python库,通过简单的界面即可提供广泛的可视化效果。 There are many different visualisation libraries avai…

Hadoop 2.0集群配置详细教程

Hadoop 2.0集群配置详细教程 前言 Hadoop2.0介绍 Hadoop是 apache 的开源 项目,开发的主要目的是为了构建可靠,可拓展 scalable ,分布式的系 统, hadoop 是一系列的子工程的 总和,其中包含 1. hadoop common &#xff…