Unity Animator混合树
2017-02-06 10:43
288 查看
1: 状态转换 :是在规定时间,或者某一条件下:从一个动作过渡到另一个动作,在两个不同的动作过渡用这个会比较有好的过渡效果。
2. BlendTree 混合树: 一般混合两个相似的动作,它们可以通过控制权重来决定混合程度。
混合树创建步骤:1.右击出现creat state -> from blend Tree.
![](http://upload-images.jianshu.io/upload_images/1310652-b6014ffc6f4520e5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
2.双击新建的混合树:
![](http://upload-images.jianshu.io/upload_images/1310652-db0bfe4aa82cda73.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
3.右击添加两个addMotion
![](http://upload-images.jianshu.io/upload_images/1310652-f06abd1137cc8d3a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
4.创建两个Motion:设置Blend Type 为1D ( 只有一个参数,用于控制状态之间的切换 )右上角的Parameter参数 为 Speed .然后通过设置speed在Unity 脚本中设置混合的权重:因为主角上升下落会导致主角上升下落动作融合切换,所以可以通过把主角的正负速度设置为Speed 这个参数的值;代码如下
//这个插值可以使在主角踩在蹦床的时候要 向上弹跳的时候(冲力)(速度比较大)但是一下子动作速度从负到正(比较大的速度)的融合异常。
float _speed = Mathf.Lerp(qiqiAnimator.GetFloat("Speed"), qiqiRigidbody.velocity.y, Time.deltaTime * 5); player.SetFloat("Speed", _speed);
![](http://upload-images.jianshu.io/upload_images/1310652-5ac0d748f753502d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
5.speed参数的设置在左上角parameter上设置。
![](http://upload-images.jianshu.io/upload_images/1310652-4ac5ce70b53ef77c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
6. blendTree Type
1. 2D Simple Directional具有方向性的动画片段,同一方向上最好不要有多个动画片段
2 . 2D Freeform Directional :主要用于控制具有方向性的动画片段,同一方向上允许有多个动画片段,(0,0)位置上必须有一个动画片段
3. 2D Freeform Cartesian : 不一定具有方向性的动画片段.
下面:创建蹦床的九个动作:把blendTree 设置2D笛卡尔坐标系(上面第三种):给它们设置两个参数:分别为Horizontal ,Height,然后通过设置混合树对应参数的坐标。这样在蹦床上就可以通过主角碰到蹦床的时候根据蹦床要给予主角向上的力度大小归一化大小来判断蹦床深度混合程度以及主角踩在蹦床位置归一化比例大小来判断主角左中右动画的融合程度。
设置代码类似上面。
2. BlendTree 混合树: 一般混合两个相似的动作,它们可以通过控制权重来决定混合程度。
混合树创建步骤:1.右击出现creat state -> from blend Tree.
![](http://upload-images.jianshu.io/upload_images/1310652-b6014ffc6f4520e5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
2.双击新建的混合树:
![](http://upload-images.jianshu.io/upload_images/1310652-db0bfe4aa82cda73.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
3.右击添加两个addMotion
![](http://upload-images.jianshu.io/upload_images/1310652-f06abd1137cc8d3a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
4.创建两个Motion:设置Blend Type 为1D ( 只有一个参数,用于控制状态之间的切换 )右上角的Parameter参数 为 Speed .然后通过设置speed在Unity 脚本中设置混合的权重:因为主角上升下落会导致主角上升下落动作融合切换,所以可以通过把主角的正负速度设置为Speed 这个参数的值;代码如下
//这个插值可以使在主角踩在蹦床的时候要 向上弹跳的时候(冲力)(速度比较大)但是一下子动作速度从负到正(比较大的速度)的融合异常。
float _speed = Mathf.Lerp(qiqiAnimator.GetFloat("Speed"), qiqiRigidbody.velocity.y, Time.deltaTime * 5); player.SetFloat("Speed", _speed);
![](http://upload-images.jianshu.io/upload_images/1310652-5ac0d748f753502d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
5.speed参数的设置在左上角parameter上设置。
![](http://upload-images.jianshu.io/upload_images/1310652-4ac5ce70b53ef77c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
6. blendTree Type
1. 2D Simple Directional具有方向性的动画片段,同一方向上最好不要有多个动画片段
2 . 2D Freeform Directional :主要用于控制具有方向性的动画片段,同一方向上允许有多个动画片段,(0,0)位置上必须有一个动画片段
3. 2D Freeform Cartesian : 不一定具有方向性的动画片段.
下面:创建蹦床的九个动作:把blendTree 设置2D笛卡尔坐标系(上面第三种):给它们设置两个参数:分别为Horizontal ,Height,然后通过设置混合树对应参数的坐标。这样在蹦床上就可以通过主角碰到蹦床的时候根据蹦床要给予主角向上的力度大小归一化大小来判断蹦床深度混合程度以及主角踩在蹦床位置归一化比例大小来判断主角左中右动画的融合程度。
设置代码类似上面。
![](http://upload-images.jianshu.io/upload_images/1310652-eb85a5fa1bbdc24c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
相关文章推荐
- unity 关于新的动画系统animator的动作混合(原)
- unity shader 实现常见的混合效果
- Android和Unity混合开发——Activity和Unity脚本交互和信息传递
- Unity动画知识之二:Animator动画状态机
- [Unity&Animator]拖动Animator面板的问题
- Unity 5.6中的混合光照(上)
- Unity-Animator深入系列---控制IK
- Unity-Animator深入系列---fullPathHash和shortNameHash
- [Unity][Animation]通过Animator来控制子物体的升起下落
- unity动态加载Animator的Controller
- Unity的Animator(1)
- Unity判断Animator动画是否播放完毕
- [cnblogs镜像]Unity中 Animator 与Animation 区别
- unity Animator Override Controller的使用
- 混音器(AudioMixer):用Unity 5.0混合出美妙节拍
- Unity实现混合模式的ADD模式
- Unity 5.6中的混合光照(下)
- 混音器(AudioMixer):用Unity 5.0混合出美妙节拍
- Unity 编辑器下控制播放Animator
- unity Animator 怎么判断一个动画播放结束