Unity3D中动画和GameObject的变化关系

原创 2015年07月07日 21:32:11

三维动画一般在三维动画软件中制作,游戏引擎中也有自己所谓的gameobject的抽象。那么这两者之间有什么关系呢?具体来说,动画是否会影响游戏对象的位移和旋转(root motion)?

这里有两个概念要区别开来:
第一个是身体变换(body transform 或者叫做 bake into pose)。
什么是身体变换呢?身体变换属于三维软件,全部都在世界坐标系中产生,是动画师在三维软件中调出来的。
第二个是根变换(root motion)。
根变换属于游戏引擎,使用角色在Y=0平面的映射偏移去计算出每一帧需要进行的偏移,是引擎从三维软件导出的数据算出来的。因为三维软件导出的肌肉曲线和IK解算是局部坐标系的,没有世界坐标系的Y平面的移动,所以三维软件增加了一个通道作为Y平面的偏移,然后引擎每帧主动算出来那些Y的值,叠加到游戏中的动画中。

具体来说,在unity3d中有以下的一些组合来表示。
Bake Into Pose: 保持根变换不变,使用动画的位移和转向,看起来是在播放动画,实际上引擎中的游戏对象位移和旋转并没有发生变化
不Bake Into Pose.:如果动画产生了旋转,Y平面,XZ平面的变化,将影响到根变换
Base Upon: 设置动画的依赖。。

Apply root motion + root transform: 引擎中的游戏对象的位移和旋转在动画播放的每一帧都始终发生变化。
Apply root motion + bake into pose(body transform): 引擎中的游戏对象的位移和旋转在动画播放过程中不会发生变化。只有动画播放结束了,游戏对象才会一次性的到达动画最后一帧的位移和旋转。
No Apply root motion + bake into pose(body transform) : 动画一直播放,但是引擎中的游戏对象的位移和旋转不会发生变化. 如果开始一个新的动画,模型立即回到起始位置。
No apply root motion + root transform: 模型保持不变。

关键就是区别3dmax/maya中导出的动画和游戏引擎中的游戏对象的互动关系。

版权声明:本文为博主原创文章,未经博主允许不得转载。

全新的Unity移动游戏优化解决方案

全新的Unity移动游戏优化解决方案 在今年的CJ CGDC 中国游戏开发者大会上,来自Unity大中华区的技术支持经理张鑫带来了关于《全新的Unity移动游戏优化解决方案》的精彩主题演讲。本次演讲分...
  • husheng0
  • husheng0
  • 2015年08月16日 01:11
  • 1738

unity3d 如何得到当前物体播放的动画

查了unity自带的文档,没有找到解决方案, 后来网上找到的,好用,mark  public static string GetCurrentPlayingAnimationClip(Ga...
  • smilelance
  • smilelance
  • 2014年03月27日 14:06
  • 10398

Unity3d之Animation(动画系统)

1,动画系统配置 创建游戏对象并添加Animation组件,然后将动画文件拖入组件。 2,代码控制动画 Play("ation 1" );,播放动画,传入参数为动画名字 Stop("ation 1")...
  • dingkun520wy
  • dingkun520wy
  • 2016年04月30日 18:15
  • 23040

unity3d动画操作以及动画实现

今天主要总结的是 unity3d 中内置动画操作,以及代码事件编写动画实现 1.如何导入、执行外部动画  在项目窗口中,首先,单击选择我们所准备的动画模型,在属性面板中选择Animations栏,...
  • book_longssl
  • book_longssl
  • 2015年02月22日 15:13
  • 7106

Unity3D【脚本】获取游戏物体的Animator组件,并且修改动画属性

using UnityEngine; using System.Collections; public class PlayAminitors : MonoBehaviour { public ...
  • u010841622
  • u010841622
  • 2014年06月25日 14:30
  • 5909

Unity3D Update函数中new GameObject对象,并绑定点击事件

Update() 是Unity 类中继承了MonoBehaviour,就有的一个方法,每一帧都调用要在Update方法中,new 对象,并同时添加一个点击事件。每一帧都new GameObject并绑...
  • qq_26437925
  • qq_26437925
  • 2017年01月11日 21:22
  • 1633

Unity/Animation -- 创建Animation Clip

在游戏开发过程中,动画是一个不可或缺的环节,没有动画变换的人物并不能带给玩家很好的代入感,而Unity作为一个强大的游戏引擎,自然包括了复杂的动画系统,即Animation System。...
  • qq_28849871
  • qq_28849871
  • 2017年05月21日 01:54
  • 1605

unity之Animation组件

如图所示一共有8个动作
  • zhliu1991
  • zhliu1991
  • 2014年10月10日 09:57
  • 744

为什么 Instantiate 克隆出来的GameObject的Scale 在 SetParent 总是放大 64倍?

经常会犯一个错误: GameObject childNodeClone = Instantiate(childNode) as GameObject; childNodeClone.transfor...
  • cp790621656
  • cp790621656
  • 2016年02月27日 13:25
  • 3721

Unity 3D之使用GameObject创建简单的可移动的对象

在Unity 3D上开发游戏,需要游戏脚本与3D建模相结合,将写好的脚本拖曳到3D对象里从而实现效果。 下面是一个小实例,使用Unity 3D实现一个可控制移动的小人,小人可以向前、向后、向左和向右移...
  • zgljl2012
  • zgljl2012
  • 2015年03月17日 14:13
  • 3017
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Unity3D中动画和GameObject的变化关系
举报原因:
原因补充:

(最多只允许输入30个字)