搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
羊村懒王
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
(一)QML加载离线地图+标记坐标点
2
ubuntu 16.04 php 安装curl方法_ubuntu16 php --enable-curl
3
【线性代数】齐次与非齐次线性方程组有解的条件_齐次方程有非零解m=n
4
svn使用笔记_sqlite[s1]: no such table: wcroot
5
自己动手编译QGIS 3.18源代码,含出错大全和解决办法_is not a valid qgis.layerfilter
6
vs文件乱码:文件加载,使用Unicode(UTF-8)编码加载文件xxx时,有些字节已用Unicode替换字符替换。保存该文件将不会保留原始文件内容。解决方案_文件加载 使 用unicode (utf-8) 编码加载文件时,有些字节已用 unicode 替换字
7
el-select懒加载(自定义指令selectLazyload)实现大数据量展示和搜索_下拉选择框懒加载数据
8
在圣诞及元旦的日子里如何用html代码画一个爱心树_html网页表白爱心树
9
iOS 关于UIWebView常见使用方法
10
ES集群部署
当前位置:
article
> 正文
Unity动画知识之二:Animator动画状态机_unity 状态机不按条件转换
作者:羊村懒王 | 2024-02-21 20:34:37
赞
踩
unity 状态机不按条件转换
文/拉撒路
上次我们讲过
Unity游戏动画从入门到住院
,今天我们来讲一下动画状态机。
好了,现在我们已经成功的导入了动画。接下来要玩的东西就很装13啦。因为大部分动画师是用不到这家伙的,需要掌握这个技能的,至少也是动画组长级别了。嗯。。。一个组只有你一个动画的,闭嘴!给你个同情的眼神。
这个装叉的东西就是动画状态机
嘛~肯定有不明真相的吃瓜群众要问
, 这东西除了装B还能干嘛用。状态机嘛,提供了动画状态之间的切换功能、自带动画融合、能编辑动画播放的逻辑顺序、能设置随机播放、能设置行为树。现役动画状态机是在4.0版本问世的,他跟前代相比。那简直是bip骨骼跟bone骨骼的区别。
首先,我们要创建个新的状态机。在project面板下,点create 找到animator controller 点击创建状态机,按F2可从命名,双击它进入状态机面板。或在window窗口,找到animator打开状态机面板。
把做好的动画拖入状态机面板,或右键create state→empty创建空状态,在属性面板motion属性栏指定动画。
那么接下来介绍下灰色矩形状态机的inspector(属性面板)内容
命名 不解释
tag 标签
motion 前面说过 是指定动画的地方
speed 速度 动画的播放速度 单位是倍
mirror 镜像 跟动画系统那边的镜像没啥区别
cycle offset 循环抵消 额 貌似是循环次数设置
这三个参数都有parameter这个选项 这个勾选的话就是使用动画自带的参数设置
foot IK 脚部IK
write defaults 写入预设
创建了一系列灰色矩形状态,右键make transition可以给状态机之间指定连接关系
选中连线,会发现连线也是有属性设置的。毁誉参半的动作融合就是在这里设置
接受打断时间 勾选后要等当前动画播放完后,才会接下一个状态。不勾选的话 就允许动画播放一半时被打断。这里稍微介绍一下下面的参数,实际你再操作过程当中自然就理解是什么意思了……setings设置、exit time打断时间(从哪一帧开始逐渐降低当前动画的权重)、fixed duration固定持续时间(这其实是一个切换开关,切换是按照秒显示还是按照百分比显示)、transition duration过度持续时间 (过度有多长)、transition offset过度抵消(从下一个动画的什么位置开始播放)、interruption source中断来源 。
嘛 给大家看一个比较简单的动画状态机,这里橙色的待机动画是初始状态,其他状态都需要从这里出发,也都能回到这里。这是最没有要求的的策划宝宝
想出的最简单粗暴状态逻辑了。每个灰色矩形的状态表示一种动画,箭头连线表示状态切换方向。比如待机和移动是可以互相切换过去的,但是待机能切换到死亡,死亡却不能切回待机。正所谓人死不能待机,说的就是这个道理。这里说个小瑕疵,就是我的状态机是为了演示方便所以起的中文名,你的话最好不要用中文。因为。。。
接下来以三连击为例,讲一个相对复杂一点的状态机关系。正常顺序为待机→攻击1→攻击2→攻击3→攻击3收招→待机,这是一套三连击打完的顺序,但是玩家操作的时候可能只按了一下攻击,那么状态机的顺序就是待机→攻击1→攻击1收招→待机。攻击2同理。这是一个有那么点要求的act或arpg策划大爷
提出的合理要求。一个状态下会有两种支线状态,此时的状态机切换逻辑还是在一个小学毕业的理解水平,接下来我们说个初中毕业的。
在状态机窗口空白处右键,create sub-state machine 创建名为次级状态机的东西,恩,这么low鸡的名字我们肯定不会用的,我们管他叫灰色六边形状态机好了
这个状态机的作用是,他可以创建另外一套次级状态。举例来说,act游戏中角色站着的时候有站跑攻击防御,下蹲的时候则是另外一套站跑攻击防御。下蹲就是次级状态,因为下蹲跑,下蹲攻击这些动作都是基于下蹲这个状态,所以他们可以独立成为一个次级状态机。
双击灰色六边形状态机,进入次级状态机编辑页面。标题栏可以看到下蹲页签在基础层之下。这里简单罗列了几个下蹲的动画状态便于理解。这是一个比较有要求的策划老爷
提出的高标准的要求,比如下蹲攻击防御被击,空中攻击防御被击,中毒状态下攻击防御被击,残血状态下攻击防御被击等等不同的次级状态。。。恩 恭喜你初中毕业,完成了九年义务教育成为了一个普通的动画师
现在到了高中的课程了,你遇到了一个有理想的策划爸爸
,他向你提出了一个无理要求。当手柄摇杆轻轻向前推的时候角色缓慢的移动,全力向前推的时候角色快速跑动;当摇杆左右轻推的时候,角色小幅度的转向,全力左右推的时候,角色大幅度转向。放下那条狗,不要急着x它
。能解决无理要求,这就是你和普通动画师的区别。在别人日了狗日了整个动物园的时候,你完成了高中毕业。。。
选择“移动”这个灰色矩形状态机 create new blendtree in state 创建一个行为树。双击进入行为树编辑页面
为了满足这个有理想的策划爸爸,你需要做好以下动画,待机、待机小转、待机大转、走、走小转、走大转、跑、跑小转、跑大转。转弯的动画可以只做一侧,另一侧用镜像动画实现。然后把这些动画链接给行为树。属性面板,设置行为树属性为2D freedom cartesian,这里不一一介绍几个行为树属性标签,大家可以自行尝试一下,其他的标签都是在此基础上做减法很容易理解。
在motiom栏填好动画,posX、posY设置好坐标,时钟图标表示速度,小人图标表示动画镜像。
这里的坐标设置0,0原点是待机,直线向上是走,再向上是跑;原点横向位置,近距离的是小转动画,远距离的是大转动画,走跑也是如此。图中红色点表示当前角色的状态,因为在0和1之间有无限个数字,所以这个状态是无限的,他是多个状态的融合,最多可以同时获取四个动画状态而融合成为一个全新的中间态。做完这一步,就需要程序老爷帮忙将摇杆推动的幅度映射到这个平面上,就可以实现有理想的策划爸爸提出的需求了。到此,阁下高中毕业,是一个了不起的人才!但是我知道你没那么容易满足,接下来我们学习一点高中火箭提高班的课程吧。
刚刚那个有理想的策划爸爸一拍脑门忽然有了个绝妙的点子,当角色跑到最快的状态后,他可以爆气,进入狂暴状态,但是随着狂暴值减少,要逐渐变回正常跑。此时,我们要在跑步状态机下,加入一个线性行为树。是的没错,行为树的子级也可以是行为树,如果你的策划足够睿(bian)智(tai),行为树可以成为一个真正的,拥有无限分支的“树”。
最后,给大家看一个比较复杂的状态机,它包含了一个主状态,五个次级状态,N个状态机,还有一个行为树,恩,高中火箭提高班大抵如此……
科科,你不会以为真的结束了吧,我是那种只能教到高中水平的人么,咱给你来点大学的!嘛
层动画 看起来没有什么新鲜的 基本每个动画软件都会提供层动画 但是unity的层动画是在状态机这里 每加一个层 都可以配置一套全新的状态机!
终于迎来了这一天了。。。你战胜了有理想的策划爸爸,自以为从此天下无敌,纵横游戏研发界立于不败之地。没想到他还是出现了。
是的就是他,他叫做外行老板。。
。
他提出了一个可实现的小目标,要你给每个动画配上表情。
一个跑步要有喜怒哀乐忧思恐各种表情
,一个待机也要有喜怒哀乐忧思恐各种表情。你反抗说这样资源要多出N倍,他表示我们做的是精品高品质游戏,不在乎资源量。你狠狠地吸了一口利群,表示这样工作量也会翻倍,他表示如果你不行就直说,他不介意换人“不过是美工而已,到处都招的到啊”。在你的人生彷徨无助的时候,你的老朋友《unity游戏动画 从入门到住院》永远辣么坚挺的在你身后顶你!
不就是表情吗!新建一个动画层!搭建一套表情的状态机!然后做一套喜怒哀乐忧思恐的表情!注意!只要一套!然后丢给程序!让他写好调用逻辑!就可以完美实现每个动画都有各种表情了!
这时老板又提出了一点小想法
,听说换装很赚钱,我们也要做换装!而且要每个衣服针对不同的动作都有对应的动画!什么?项目到中期了你才跟我说要加换装?
本宝宝捅死你哦
别急别急,我们可以!我们只需要新建一个衣服的层,创建与身体动画一一对应的状态机,然后把衣服的动画配置好就行了!恩这个方法是需要巨大的工作量和资源量。但是项目中期才提出换装需求的话,这几乎是唯一解!
至此,老板已经对你刮目相看
!但是他昨晚喝酒的时候又想到了一件事!“我们这个游戏呢有各种战斗天使,有的长了两个翅膀,有的长了八个翅膀,最厉害的战斗天使大哥长了十六个翅膀,但是他们的身体动画都是一样的!小伙子你想想办法能让他们公用身体动画资源,然后每个人用各自的翅膀动画!这也是听你的想法节省资源嘛。”(别问我为什么还不辞职,因为你穷啊!)
好的,怎么做!我们要给每个角色新建一个状态机,每个状态机分两层。一层是身体动画,大家公用一套动作,一层是翅膀动画,大家用各自单独导出的动作。简单吗,就这么简单。呵呵呵呵嘤嘤嘤嘤 。。。我特么到底经历了什么才学会的这些啊!
layers页面下点击右侧加号新建层
点击每个层的齿轮可以设置层属性,由上到下分别是权重(这一层对动画影响的权重值)、遮罩(身体遮罩,用来遮盖身体各部分动画如表情动画需要遮盖掉头部以下所有部位)、混合模式(可选叠加或者覆盖,字面意思)
这里再给大家额外介绍一种override controller。就叫他加号状态机好了,创建它跟创建正常状态机一样。它相当于在一个原有的状态机外部加一个壳,这样我们就可以完美的继承下来原有状态机的所有配置,并且可以所以更改、从新指定原状态机任意位置的动画。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/羊村懒王/article/detail/126390
推荐阅读
article
Unity
之
安卓
平台上架
隐私
问题
解决方案
...
分别对
Unity
是否导出
安卓
工程打包apk进行前置处理,添加
隐私
政策的展示和授权后在启动
Unity
,这样就可以解决Uni...
赞
踩
article
自定义
Unity
的
Property
Attribute
_
unity
'materialprop...
1 首先定义特性 描述类,继承自
Unity
Engine.
Property
Attribute
2 再定义特性的 绘制类,继...
赞
踩
article
Unity
编辑器
篇|(三)
Attribute
特性
(全面总结 | 建议收藏)_sharedbetw...
Unity
特性
是一种用于装饰(标记)类、字段、方法和属性的 .NET
特性
,用于控制
Unity
引擎的行为、检查代码...
赞
踩
article
Unity
Attribute
标签用法_[
colorusageattribute
(
false
,
tr...
Unity
Attribute
标签用法标记字段[ColorUsage(
false
,
true
,
0f
,
8f
,
1f
,
...
赞
踩
article
Unity
Attributes
自带特性...
AddComponentMenuAddComponentMenu属性允许您将脚本放置在“组件”菜单中的任何位置,而不仅仅...
赞
踩
article
Unity
Editor 基础篇(七):
Property
Attributes
自定义
属性_
unity
...
本文参自:http://mp.weixin.qq.com/s/kjoS2DaAADBUPMg1kHwnSg本文为本人学习...
赞
踩
article
Unity
创建
自定义
属性
绘制
器_
unity
editor
如何
绘制
自定义
结构...
Unity
创建
自定义
属性
绘制
器简介:
Unity
自带了一些
属性
绘制
的特性[Header][Tooltip][Contex...
赞
踩
article
Unity
Editor
编辑器拓展 10——
PropertyDrawer
属性
绘制
器...
描述用于从中派生自定义
属性
绘制
器的基类。使用此基类可为您自己的Serializable类或者具有自定义PropertyA...
赞
踩
article
Unity
Sprite
Renderer API
Sprite
的大小,宽度,高度 以及
bounds
...
当
sprite
Renderer的rendermode设置为sliced时,可以通过
Sprite
Renderer.
size
...
赞
踩
article
Unity
Button
AddListener
() 来添加
click
事件_
unity
onclic...
button的组件里面有一个方法OnClick.
AddListener
这个方法来监听点击事件_
unity
onclic...
赞
踩
article
【
Unity
】关于
属性
重绘
PropertyDrawer
的
一些吐槽(文明人
不
臭骂)[
Unity
版本:2...
【未经本人同意
不
得私自转载!】【文章发布于CSDN,原文链接:https://blog.csdn.net/weixin
_
...
赞
踩
article
Unity
Bound
详解_unity
bounds
...
在
Unity
中,包围盒(
Bound
ing Box)是一个几何形状,用于近似地表示物体或一组物体在三维空间中的范围或边...
赞
踩
article
sprite
的大小
unity
_
Unity
中的
Sprite
纹理压缩(
Sprite
texture
c...
Unity
中的
Sprite
纹理压缩(
Sprite
texture
compression in
Unity
)我希望稍微压...
赞
踩
article
凉鞋的
Unity
笔记 106.
第二轮
循环&
场景
视图&
Sprite
Renderer
_跟着凉鞋里...
而 GameObject 上的组件决定了这个 GameObject 包含有什么功能,比如
Sprite
Renderer
...
赞
踩
article
Unity
UI
适配不同
比例
分辨率
的
设置
_
unity
图片
比例
...
至前我参与的小游戏开发的过程中,在适配不同
分辨率
比例
的手机上
UI
遇到了一些问题.下面对解决这些问题的方法进行记录(适配不...
赞
踩
article
Unity
关于
SpriteRenderer
和正交
相机
缩放
_
unity
相机
根据
分辨率
缩放
...
750x1334
分辨率
下为全屏显示,那么如何在
相机
size不改变的情况下使精灵全屏显示呢?需要计算不同
分辨率
下的比例,...
赞
踩
article
Unity
2D
学习手札 (一)
基本概念
_
unit
y
unit
大小
...
前言刚开始学习
Unity
2D
,看了几本书,或许书中重点都不在
2D
的部分,总是不得其门而入,无法快速的上手,充满挫...
赞
踩
article
Unity
获取
Sprite
的宽和高
_
unity
sprite
的大小怎么
获取
...
float bound
_
x = go.GetComponent<
Sprite
Renderer>().bounds.siz...
赞
踩
article
Unity
解决:
Unity
SpriteRenderer
屏幕
自适应的多种模式【动态调整大小 以遮盖I...
3.选择更新类型EUpdateType、选择适配类型EFillModel即可。2.把需要进行
屏幕
适配的SpriteRen...
赞
踩
article
Unity
Sprite
Render改变
Sprite
保持原有大小_怎么处理spriterender...
之前没有做过2d 以为2d游戏里更换图片和UGUI 里的Image换图一样,结果发现图片换了,尺寸也会跟着变,这是因为原...
赞
踩
相关标签
unity
游戏引擎
隐私协议
unity3d
编辑器
c#
sprite的大小 unity
笔记
适配
精灵适配
unity适配
正交相机精灵适配