精华内容
下载资源
问答
  • blendtree

    2018-02-08 21:07:26
    https://www.cnblogs.com/hammerc/p/4832642.html这个人博客有unity认识Blend Tree我们在Animator Controller中除了可以创建一个State外还可以创建一个Blend Tree,如下:那么我们看下新创建的Blend Tree和State有...

    https://www.cnblogs.com/hammerc/p/4832642.html

    这个人博客有unity




    认识Blend Tree

    我们在Animator Controller中除了可以创建一个State外还可以创建一个Blend Tree,如下:

    那么我们看下新创建的Blend Tree和State有什么区别:

    唯一的区别就是Montion指向的类型变成了Blend Tree类型,那么一个Blend Tree其实也就是一个状态,和状态不同的地方就是一个状态只能设定一个动画,而一个Blend Tree则可以设定为多个动画的混合。

    混合树是Mecanim动画系统中比较复杂的一个内容,且其分为多个维度,下面我们逐个的来进行学习。

    一维混合树

    我们以官方的例子使用一维混合树来实现下面的效果:我们人物的跑动分为3个动画,分别是向前跑、向左跑和向右跑,其中向左跑和向右跑人物都会有一定的倾斜,这样更加符合现实的情况,那么我们在状态机中跑动只有一个状态,所以我们的跑动需要设置为混合树来混合这3个动画。

    首先我们需要创建一个新的场景,拖入我们的人物模型,然后创建一个Animator Controller并对其进行配置:

    注意我们的Run是Blend Tree而不是State,双击Run就可以进入混合树的编辑界面。

    右击我们的混合树添加3个Motion,如下:

    同时我们设定好3个方向的跑动动画:

    我们还需要设定一个名为Direction的Float类型的参数来控制这个混合树:

    接下来我们取消Automate Thresholds的选项,并按下图进行选择,系统会为我们配置好阀值:

    现在我们点击预览框查看动画播放时就可以通过拖拽小红线来看不同的变化了,我们的可使用的角度范围为-130到130之间。

    到现在我们的动画控制器就配置好了。

    脚本

    下面我们使用脚本来控制一下人物,我们给人物添加下面的脚本即可:

    复制代码
     1 using UnityEngine;
     2 using System.Collections;
     3 
     4 public class TestBlendTree : MonoBehaviour
     5 {
     6     public float DirectionDampTime = 30.0f;
     7 
     8     private Animator _animator;
     9 
    10     void Start()
    11     {
    12         _animator = this.GetComponent<Animator>();
    13     }
    14     
    15     void Update()
    16     {
    17         if(Input.GetKeyDown(KeyCode.W))
    18         {
    19             _animator.SetBool("run", true);
    20         }
    21         if(Input.GetKeyUp(KeyCode.W))
    22         {
    23             _animator.SetBool("run", false);
    24         }
    25 
    26         AnimatorStateInfo state = _animator.GetCurrentAnimatorStateInfo(0);
    27         //奔跑状态下才允许转弯
    28         if(state.shortNameHash == Animator.StringToHash("Run"))
    29         {
    30             //指定人物转弯通过控制混合数的参数即可
    31             float h = Input.GetAxis("Horizontal") * 130.0f;
    32             //DirectionDampTime 指示了每秒可以到达的最大值
    33             //deltaTime 表示当前帧的时间
    34             _animator.SetFloat("Direction", h, DirectionDampTime, Time.deltaTime);
    35         }
    36         else
    37         {
    38             //重置一下参数
    39             _animator.SetFloat("Direction", 0);
    40         }
    41     }
    42 }
    复制代码

    为了让摄像机跟随人物,我们直接添加官方给出的这个脚本到摄像机上即可:

    复制代码
     1 using UnityEngine;
     2 using System.Collections;
     3 
     4 public class ThirdPersonCamera : MonoBehaviour
     5 {
     6     public float distanceAway;            // distance from the back of the craft
     7     public float distanceUp;            // distance above the craft
     8     public float smooth;                // how smooth the camera movement is
     9     
    10     private GameObject hovercraft;        // to store the hovercraft
    11     private Vector3 targetPosition;        // the position the camera is trying to be in
    12     
    13     Transform follow;
    14     
    15     void Start(){
    16         follow = GameObject.FindWithTag ("Player").transform;    
    17     }
    18     
    19     void LateUpdate ()
    20     {
    21         // setting the target position to be the correct offset from the hovercraft
    22         targetPosition = follow.position + Vector3.up * distanceUp - follow.forward * distanceAway;
    23         
    24         // making a smooth transition between it's current position and the position it wants to be in
    25         transform.position = Vector3.Lerp(transform.position, targetPosition, Time.deltaTime * smooth);
    26         
    27         // make sure the camera is looking the right way!
    28         transform.LookAt(follow);
    29     }
    30 }
    复制代码

    记得将人物的Tag设置为Player,同时脚本也要设置一下:

    动画方面的一点要求

    每个混合树的动画有一些要注意的地方:

    1. 动画长度需要一致;
    2. 动画的起始姿势需要一致;

    二维混合树

    同1维混合树,不过二维混合树已经作为一个平面来处理,同时需要两个参数来进行控制。对于更复杂的动画融合可以使用该模式,这里就不深入学习了。

    我们可以将两个1维混合树合并为一个2维混合树来控制。

    多维混合树

    多维混合树在Unity5时添加,其配置更加复杂,一般使用在脸部表情的动画融合上。

    天道酬勤,功不唐捐!

    展开全文
  • Blend Tree

    千次阅读 2014-03-01 11:08:17
    Blend Tree是融合了的动画状态,一个Blend Tree就是一个AnimationController中的一个动画状态(Animation State),与普通的动画状态是一样的,只不过它的动画是融合的动画。 阈值(threshold):一个Blend Tree中融合...

    Blend Tree是融合了的动画状态,一个Blend Tree就是一个AnimationController中的一个动画状态(Animation State),与普通的动画状态是一样的,只不过它的动画是融合的动画。

    阈值(threshold):一个Blend Tree中融合了多个动画剪辑,每一个动画剪辑在其中占一定的权重,权重的和为1.我们可以使用动画参数来调节不同的动画剪辑在blend tree中所占的权重,从而形成多种多样的动画。使某个动画剪辑的权重为1的动画参数值叫做这个动画剪辑的阈值。

     

    我们可以自动设置阈值,勾选Automate Thresholds即可,这样会自动计算阈值。

    比如有三个动画剪辑的Blend Tree,三个剪辑分别为RunLeft,Run,RunRight,我们可以在Motion列表里手动设置它们的阈值为0,6,8,动画参数为direction,这是可以的,表示当direction分别为0,6,8时,三个剪辑的权重分别达到最大值。

    当我们勾选Automate Thresholds时,RunLeft,RunRight的阈值不变,Run的阈值被更改为4,也就是0和8两个阈值的中间值。

    再比如,如果有五个动画剪辑分布在-90到+90的范围内,那么他们的阈值会被分别设定为-90,-45,0,+45和+90。

    当不勾选Automate Thresholds时,我们还可以选择Compute Thresholds。比如说我们选择Speed,动画剪辑的阈值会改变为各个动画剪辑的运动速度。而我们有个动画参数speed,我们在脚本中设置spee,使speed恰好为角色运动的速度,这样就恰好使我们的动画参数值与设定的阈值对应起来了。不过这种设置阈值的方法只适用于有位移的动画?

    打个比方说:你有一个走动动画,他每秒移动1.5个单位,而一个慢跑动作每秒移动2.3个单位,而一个跑动动作每秒移动4个单位。选择下拉列表中的“速度”(Speed)选项可以基于这些值为三个动画配置参数范围。所以,如果你把参speed数设置为了3.0,就混合了慢跑和跑动动画,并且(临界值)稍微偏向慢跑一些。

     

    展开全文
  • 一、Blend Tree介绍及应用 一个游戏动画的基本任务就是将两个或多个相似的动作混合。也许最广为人知的例子就是依照任务行动的速度将行走和跑动动画混合起来了。另一个例子就是角色在跑动中向左或向右转身。 如何...

    一、Blend Tree介绍及应用

    一个游戏动画的基本任务就是将两个或多个相似的动作混合。也许最广为人知的例子就是依照任务行动的速度将行走和跑动动画混合起来了。另一个例子就是角色在跑动中向左或向右转身。

     

    如何创建Blend Tree:

      在动画视窗中右键:Create State-From new Blend Tree
    BlendTree主要作用:

      把几个类似的动画片段合成复合的动画片段,可以说相当于一个动画合成器。
    典型的应用:

      想前跑、右跑、左跑类似的走动画片段,通过BlendTree可以把这三个动画片段合成为一个动画片段。

     

    状态转移和混合树区别:

      相同点:两者都被用来制作平滑动画,但是他们是分别在不同的情况下使用的。

        不同点:

        1、状态转移是在确定的时间内从一个动画状态平滑的转移至另一个时使用的。状态转移被认定为动画状态机的一部分。如果一个动作跳转到另一个完全不同的动作耗时很短,那么状态转移通常的表现令人满意。

        2、动画混合树是通过使用不同的角度将角色不同的部分混合达到平滑混合不同的动画的目的的。他会用一个有动画控制器有关的、可量化的混合参数来控制各个动作相对于最终的效果的权重。为了使混合过后的动作起作用,必须混合造型和时间相近的动作。动画混合树在动画状态机中是一个特殊类型的状态。

     

    二、Blend Tree选项

    双击进入Blend Tree 属性编辑中显示相关选项

    融合类型:1D、2D Simple Directional、2D Freeform Directional、2D Freeform Cartesian
    1、1D选项 使用一个动画参数来控制Blend Tree中几个动画判断的融合。
     

    三、复合Blend Tree

     

     

     

     

     

    转载于:https://www.cnblogs.com/PEPE/p/3621779.html

    展开全文
  • 我们在Animator Controller中除了可以创建一个State外还可以创建一个Blend Tree,如下:那么我们看下新创建的Blend Tree和State有什么区别:唯一的区别就是Montion指向的类型变成了Blend Tree类型,那么一个Blend ...

    我们在Animator Controller中除了可以创建一个State外还可以创建一个Blend Tree,如下:

    那么我们看下新创建的Blend Tree和State有什么区别:

    唯一的区别就是Montion指向的类型变成了Blend Tree类型,那么一个Blend Tree其实也就是一个状态,和状态不同的地方就是一个状态只能设定一个动画,而一个Blend Tree则可以设定为多个动画的混合。

    混合树是Mecanim动画系统中比较复杂的一个内容,且其分为多个维度,下面我们逐个的来进行学习。

    一维混合树

    我们以官方的例子使用一维混合树来实现下面的效果:我们人物的跑动分为3个动画,分别是向前跑、向左跑和向右跑,其中向左跑和向右跑人物都会有一定的倾斜,这样更加符合现实的情况,那么我们在状态机中跑动只有一个状态,所以我们的跑动需要设置为混合树来混合这3个动画。

    首先我们需要创建一个新的场景,拖入我们的人物模型,然后创建一个Animator Controller并对其进行配置:

    注意我们的Run是Blend Tree而不是State,双击Run就可以进入混合树的编辑界面。

    右击我们的混合树添加3个Motion,如下:

    同时我们设定好3个方向的跑动动画:

    我们还需要设定一个名为Direction的Float类型的参数来控制这个混合树:

    接下来我们取消Automate Thresholds的选项,并按下图进行选择,系统会为我们配置好阀值:

    现在我们点击预览框查看动画播放时就可以通过拖拽小红线来看不同的变化了,我们的可使用的角度范围为-130到130之间。

    到现在我们的动画控制器就配置好了。

    脚本

    下面我们使用脚本来控制一下人物,我们给人物添加下面的脚本即可:

    复制代码
     1 using UnityEngine;
     2 using System.Collections;
     3 
     4 public class TestBlendTree : MonoBehaviour
     5 {
     6     public float DirectionDampTime = 30.0f;
     7 
     8     private Animator _animator;
     9 
    10     void Start()
    11     {
    12         _animator = this.GetComponent<Animator>();
    13     }
    14     
    15     void Update()
    16     {
    17         if(Input.GetKeyDown(KeyCode.W))
    18         {
    19             _animator.SetBool("run", true);
    20         }
    21         if(Input.GetKeyUp(KeyCode.W))
    22         {
    23             _animator.SetBool("run", false);
    24         }
    25 
    26         AnimatorStateInfo state = _animator.GetCurrentAnimatorStateInfo(0);
    27         //奔跑状态下才允许转弯
    28         if(state.shortNameHash == Animator.StringToHash("Run"))
    29         {
    30             //指定人物转弯通过控制混合数的参数即可
    31             float h = Input.GetAxis("Horizontal") * 130.0f;
    32             //DirectionDampTime 指示了每秒可以到达的最大值
    33             //deltaTime 表示当前帧的时间
    34             _animator.SetFloat("Direction", h, DirectionDampTime, Time.deltaTime);
    35         }
    36         else
    37         {
    38             //重置一下参数
    39             _animator.SetFloat("Direction", 0);
    40         }
    41     }
    42 }
    复制代码

    为了让摄像机跟随人物,我们直接添加官方给出的这个脚本到摄像机上即可:

    复制代码
     1 using UnityEngine;
     2 using System.Collections;
     3 
     4 public class ThirdPersonCamera : MonoBehaviour
     5 {
     6     public float distanceAway;            // distance from the back of the craft
     7     public float distanceUp;            // distance above the craft
     8     public float smooth;                // how smooth the camera movement is
     9     
    10     private GameObject hovercraft;        // to store the hovercraft
    11     private Vector3 targetPosition;        // the position the camera is trying to be in
    12     
    13     Transform follow;
    14     
    15     void Start(){
    16         follow = GameObject.FindWithTag ("Player").transform;    
    17     }
    18     
    19     void LateUpdate ()
    20     {
    21         // setting the target position to be the correct offset from the hovercraft
    22         targetPosition = follow.position + Vector3.up * distanceUp - follow.forward * distanceAway;
    23         
    24         // making a smooth transition between it's current position and the position it wants to be in
    25         transform.position = Vector3.Lerp(transform.position, targetPosition, Time.deltaTime * smooth);
    26         
    27         // make sure the camera is looking the right way!
    28         transform.LookAt(follow);
    29     }
    30 }
    复制代码

    记得将人物的Tag设置为Player,同时脚本也要设置一下:

    动画方面的一点要求

    每个混合树的动画有一些要注意的地方:

    1. 动画长度需要一致;
    2. 动画的起始姿势需要一致;

    二维混合树

    同1维混合树,不过二维混合树已经作为一个平面来处理,同时需要两个参数来进行控制。对于更复杂的动画融合可以使用该模式,这里就不深入学习了。

    我们可以将两个1维混合树合并为一个2维混合树来控制。


     实现的效果:人物在跑的状态下,才能进行转弯操作,和跳起动作。

       1:  unity中的动画混合树可以将几个动画文件很好的融合在一起其中Run是状态树:                                                                                                                                                                                                                                                        

                                                                                            

              参数Direction是浮点类型。上面概述为:动画状态可以是单个的动画文件,也可以是由动画文件融合成的状态树。勾选automate threshold可以修改thresl临界值


          2:第一步已经在unity面板中把先关参数配置好了,现在就需要用脚本来设置相关参数条件的实现。

    [csharp] view plain copy
    1. using UnityEngine;  
    2. using System.Collections;  
    3.   
    4. public class BlendTree : MonoBehaviour {  
    5.   
    6.     protected Animator animator;  
    7.     public float DirectionDamoTime = 0.25f;  
    8.     void Start () {  
    9.         animator = GetComponent<Animator>();  
    10.     }  
    11.       
    12.       
    13.     void Update () {  
    14.       
    15.         if(animator)  
    16.         {  
    17.             AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0);  
    18.             if (stateInfo.IsName("Base Layer.Run"))//注意这里必须是Base Layer.Run   Base Layer是动画层的名称,用.的形式引出当前准备切换动画的动画状态名称  
    19.             {  
    20.                 if (Input.GetKeyDown(KeyCode.Space))  
    21.                     animator.SetBool("Jump"true);  
    22.             }  
    23.             else  
    24.             {  
    25.                 animator.SetBool("Jump"false);  
    26.             }  
    27.             //在奔跑时才可以水平旋转  
    28.             float horizontal = Input.GetAxis("Horizontal");  
    29.             animator.SetFloat("Direction", horizontal, DirectionDamoTime, Time.deltaTime);  
    30.              
    31.             //控制idle到跑状态的切换  
    32.             if (Input.GetKeyDown(KeyCode.W))  
    33.             {  
    34.                 animator.SetFloat("Blend", 1.0f);  
    35.             }  
    36.             else if (Input.GetKeyUp(KeyCode.W))  
    37.             {  
    38.                 animator.SetFloat("Blend", -0.1f);  
    39.             }  
    40.         }  
    41.     }  
    42. }  

    展开全文
  • Unity Animator BlendTree

    2018-10-22 16:42:44
    Unity Animator BlendTree 创建 Animtor Controller 命名为 BlendTreeController, 双击打开 空白处鼠标右键 Create State -&gt; From New Blend Tree 默认名为 Blend Tree,选择 Blend Tree 查看 Inspector ...
  • unity animator BlendTree1

    2019-10-07 14:12:28
    我使用blendtree让角色进行跑,向左转,向右转,跳跃的的功能,但角色其他动画播放正常,只要转向就在原地不动了 原因:动画播放完了就不动了,设置下loop属性就行了。 使用blendtree 1 动画如果只在原地运动,...
  • 动画控制器的状态切换 我们在动画控制器中设置状态,依次是Entry->Idle->Walk,模型就会先执行Idle动画,再执行walk动画,然后就会...新建blend tree,双击blend tree,可以进入Blend Tree界面 我们给blen.
  • Unity中的BlendTree的简单使用

    千次阅读 2017-12-26 14:57:09
    2,在Run的动画状态机中添加BlendTree, 选中Run,然后鼠标右键,点击Create new BlendTree in State.  移除点击此处添加图片说明文字 ​3,进入BlendTree中,双击Run这个动画状态机之后就进入到了  移除...
  • Unity动画系统-Blend Tree

    千次阅读 2017-01-16 23:41:01
    Blend Tree-动画混合树 作用:将多个动画融合在一起,按条件触发。 创建混合树:在动画状态机中:右键->Create->Blend Tree 双击进入混合树,看右边的属性 Blend Type:混合的类型,三种类型 1D:一维混合 ...
  • 一:前言 动画混合与动画过渡虽然都用于生成平滑的动画,但是却...——创建Bleed Tree,Unity的动画控制器面板中可以创建State类型或Blend Tree类型,Blend Tree可以理解为包含多个State类型,双击进入混合树视图 .
  • 混合树(Blend Tree)是用来混合动画的。 它默认是Animator Controller里面的一个State。 和其他的单个State里面存放1个Animation不同,混合树State里面可以存放多个甚至任意个动画。 举例: 这里的Run状态...
  • Unity5.x Animator之BlendTree

    万次阅读 2016-12-12 17:30:21
    混合树 (Blend Tree) 游戏动画中的一个常见任务是在两个或更多相似运动之间混合。最佳的已知示例可能是根据角色速度混合行走和奔跑动画。另一个示例是角色在奔跑过程中转弯时向左或向右倾斜。 重要的是区分转换 ...
  • 记录一下BlendTree的简单使用和说明,这里只针对二维动画的使用 先添加一个动画控制器,添加一个空的动画名字叫Run: 然后右键点击Run,添加一个BlendTree: 右键添加的BlendTree添加动画,赋值: 设置...
  • 在Animator视图,空白处 鼠标右键 Create State--From New Blend Tree 选择刚才 新建的 Blend Tree ,鼠标选中 Blend Tree 并 左键双击 如下图所示,鼠标右键 添加 Motion ,Add Motion 选中Blend ...
  • 认识Blend Tree我们在Animator Controller中除了可以创建一个State外还可以创建一个Blend Tree,如下:那么我们看下新创建的Blend Tree和State有什么区别:唯一的区别就是Montion指向的类型变成了Blend Tree类型,...
  • 1、a、将Blend TreeBlend Type设置为2D Freeform Directional,下方的两个参数代表:我们将通过控制这两个参数,来控制角色两个方向的运动    上节的Idle-Walk-Run仅为一个方向上的运动,若前进中相左向右转,...
  • Animator 空白位置右键创建 From New Blend Tree 双击混合树进入 2.数值控制动画 点选加号添加Motion Filed 将动画放入第一个栏位 拖入两个动画后,可以通过拉动滑杆平滑切换两个动画 3.混合树参数 Blend Type : ...
  • 1、分别创建并添加角色左右转的动画 Mirror为镜像动画 2、添加控制左右转的代码 Vertical向前正,向后负;Horizontal向左负,向右正 ...Animator窗口右键选择Create State—From New Blend Tree...
  • 有时你需要混合播放2个或多个动画 比如你有向左,向前,向右奔跑的动画 但你想要得到稍微向左,向前或向右跑的动画 ... 另外一个常见的例子是:你有行走和奔跑的动画 ... Blend Tree可以实现这...
  • AnimStateMachine,BlendTree和Layer 和 IK
  • 混合树 (Blend Tree) 用于允许通过按不同程度组合所有动画的各个部分来平滑混合多个动画,本篇文章和大家分享的是使用混合树动画实现人物在跑的状态下,才能进行转弯操作,和跳起动作的效果。1、Unity中的动画混合树...
  • Blend Tree动画混合

    2020-11-09 11:03:59
    https://www.bilibili.com/video/BV1Ls411u7Yp?from=search&seid=12464088318075831200
  • 混合树 (Blend Tree) 用于允许通过按不同程度组合所有动画的各个部分来平滑混合多个动画,本篇文章和大家分享的是使用混合树动画实现人物在跑的状态下,才能进行转弯操作,和跳起动作的效果。1、Unity中的动画混合树...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 287
精华内容 114
关键字:

blendtree