unity3d 让角色运动之使用脚本(另一个方法为勾选Apply Root motion)

一、Apply RootMotion的作用:Apply RootMotion:控制角色在场景中动画的运动。角色动画驱动角色运动,类似于在游戏中直接使用动画,提高了动画的使用效率。

Root Motion 可以控制角色在动画中的运动,位移是变化的,如果没有包含Root Motion或Root Motion为0 那么如何控制角色在场景中运动呢?

例如下面walk前进的动画片段(In Place  原地踏步,原地运动)没有发生位移变化的。

unity3d 让角色运动之使用脚本(另一个方法为勾选Apply Root motion)_第1张图片

二、对以上的片段如果运用在游戏中,如何控制角色在场景中运动呢?

答案:是使用曲线+脚本 公共作用来驱动角色在场景中运动

2.1、确保此动画片段经过Avatar处理及肌肉定义后选择Clips下的walk动画片段

unity3d 让角色运动之使用脚本(另一个方法为勾选Apply Root motion)_第2张图片

2.2、选择循环项、另外确保每个都是“绿色”状态这样动画有很好的循环匹配性。如果是红色最好再调式下

unity3d 让角色运动之使用脚本(另一个方法为勾选Apply Root motion)_第3张图片

2.3、曲线属性,单击+ 号来来新增一条曲线,命名WalkSpeed

unity3d 让角色运动之使用脚本(另一个方法为勾选Apply Root motion)_第4张图片

2.4、创建一个角色控制器命名RootController并双击打开

unity3d 让角色运动之使用脚本(另一个方法为勾选Apply Root motion)_第5张图片

2.5、拖动walk到动画控制器中,可以自动产生一个动画状态。 多个动画状态可以形成一个动画状态机

unity3d 让角色运动之使用脚本(另一个方法为勾选Apply Root motion)_第6张图片

黄色表示是一个默认的动画状态

2.6、在动画控制器中左下角Parameters 选择+ 号创建一个Float并命名为WalkSpeed。对这个名字必须和之前的动画曲线名字一样。因为这样动画参数可以直接获取动画片段中动画曲线的数值。若不是用相同名称,就无法使用动画曲线里面的数值。

unity3d 让角色运动之使用脚本(另一个方法为勾选Apply Root motion)_第7张图片

2.7、把角色资源拖动到场景中,并把动画控制器赋值给角色资源的Control

unity3d 让角色运动之使用脚本(另一个方法为勾选Apply Root motion)_第8张图片

2.8、运行起来看看效果:in place

unity3d 让角色运动之使用脚本(另一个方法为勾选Apply Root motion)_第9张图片

2.9、添加脚本

using UnityEngine;
using System.Collections;
/// <summary>
/// 动画位移
/// </summary>
public class RootControl : MonoBehaviour {

 void OnAnimatorMove()
 {
  Animator animator = GetComponent<Animator>();
  if (animator)
  {
   Vector3 newPosition = transform.position;
   newPosition.z += animator.GetFloat("WalkSpeed")*Time.deltaTime;
   transform.position = newPosition;
  }
 }
}

在附加到动画之前,Apply Root Motion使用的是动画默认的Root Motion当附件脚本后就改成了脚本

unity3d 让角色运动之使用脚本(另一个方法为勾选Apply Root motion)_第10张图片

unity3d 让角色运动之使用脚本(另一个方法为勾选Apply Root motion)_第11张图片

三、最终效果

unity3d 让角色运动之使用脚本(另一个方法为勾选Apply Root motion)_第12张图片

你可能感兴趣的:(unity3d 让角色运动之使用脚本(另一个方法为勾选Apply Root motion))