Unity3D的Legacy动画系统中应用Root Motion
来源:互联网 发布:windows批处理教程 编辑:程序博客网 时间:2024/05/24 23:16
http://blog.csdn.net/neil3d/article/details/41724705
在动画时间内计算每帧动画的位移,即父节点的localPosition
把此位移给transform.position
最后处理一下循环动画,即用AnimationState.normalizedTime来控制
using UnityEngine;using System.Collections;public class ApplyRootMotion : MonoBehaviour {public Transform m_flagObject;// 用来测试位置的一个对象//-- Root Motion 控制变量Transform m_rootBone; Vector3 m_lastRootPos; Vector3 m_rootMotion; int m_lastAnimTime;void Start () {//-- 从SkinnedMeshRenderer中读取Root BoneSkinnedMeshRenderer skinMesh = this.gameObject.GetComponentInChildren<SkinnedMeshRenderer>(); m_rootBone = skinMesh.rootBone; print(m_rootBone.name); //-- 变量初始化 m_rootMotion = Vector3.zero; m_lastRootPos = m_rootBone.localPosition; m_lastAnimTime = 0;}void Update () {//-- Apply Root MotionVector3 nextPos = this.transform.position + m_rootMotion; this.transform.position = nextPos; //-- 测试代码:更新测试物体的位置 Vector3 flagPos = m_flagObject.position; flagPos.x = nextPos.x; flagPos.z = nextPos.z; m_flagObject.position = flagPos; //-- 测试代码:更新摄像机 Camera.main.transform.LookAt(this.transform);}void LateUpdate() {AnimationState animState = this.animation["walking"];if ((int)animState.normalizedTime > m_lastAnimTime){ //-- 动画循环处理 m_lastRootPos = m_rootBone.localPosition; m_rootMotion = Vector3.zero; } else { //-- 计算当前帧的Root Motion Vector3 rootPos = m_rootBone.localPosition; m_rootMotion = rootPos - m_lastRootPos; m_lastRootPos = rootPos; rootPos.x = 0; rootPos.z = 0; m_rootMotion.y = 0; m_rootBone.localPosition = rootPos; } m_lastAnimTime = (int)animState.normalizedTime; //m_lastAnimTime = 0; }}
0 0
- 在Unity3D的Legacy动画系统中应用Root Motion
- Unity3D的Legacy动画系统中应用Root Motion
- 在Unity3D的Legacy动画系统中应用Root Motion
- 在Unity3D的Legacy动画系统中应用Root Motion
- Unity3d 中Legacy动画系统-剑圣的动画
- 【Unity3D】Generic 动画中 Root Motion的概念和使用
- unity3D 中Generic动画导入设置和Root Motion之间的关系
- Unity3D 中 Generic 动画导入设置和 Root Motion 之间的关系
- Unity3D 中 Generic 动画导入设置和 Root Motion 之间的关系
- Unity3D 中 Generic 动画导入设置和 Root Motion 之间的关系
- Unity3D之Legacy动画系统学习笔记
- 动画Root Motion的脚本处理
- Unity3D的Generic和Legacy动画例子(C#脚本)
- unity之动画文件的设置与Apply Root Motion
- unity3d legacy动画事件总是丢失
- 【Unity3D】导入FBX模型使用Legacy动画的Scale缩放问题
- Unity3D 动画系统的StateMachineBehaviours
- Root Motion的脚本处理
- android Fragments详解六:处理fragement的生命周期
- Oracle RAC 几个常见的错误观点
- PHP开发环境终于找全了!
- Python笔记——Ubuntu下Pydev+Eclipse
- Fragment的简单显示
- Unity3D的Legacy动画系统中应用Root Motion
- PhotoShop算法实现进阶-模糊滤镜-高斯滤波(二十三)
- java根据ip获取ip所在地址的类
- Robotium
- DispatcherServlet详解
- quartz 2.2.1入门教程
- eclipse svn 没有 connector
- 线程
- 2031 进制转换