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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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当附件脚本后就改成了脚本

三、最终效果

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值