首页 > 其他 > 详细

Root Motion的脚本处理

时间:2014-03-20 21:19:39      阅读:517      评论:0      收藏:0      [点我收藏+]

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

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

 

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

bubuko.com,布布扣

 

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

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

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

bubuko.com,布布扣

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

bubuko.com,布布扣

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

bubuko.com,布布扣

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

bubuko.com,布布扣

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

bubuko.com,布布扣

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

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

bubuko.com,布布扣

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

bubuko.com,布布扣

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

bubuko.com,布布扣

2.9、添加脚本

bubuko.com,布布扣
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;
        }
    }
}
bubuko.com,布布扣

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

bubuko.com,布布扣

bubuko.com,布布扣

 

三、最终效果

bubuko.com,布布扣

Root Motion的脚本处理,布布扣,bubuko.com

Root Motion的脚本处理

原文:http://www.cnblogs.com/PEPE/p/3612822.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!