unity3dmax animation clipState和animationclip的区别

3998人阅读
游戏开发(19)
在Unity中,我们有两种方法创建Animation Clip。
一种(后面简称方法一)是选中挂载了Animation组件的GameObject,在Animation窗口中点击Create New Clip创建出来的Animation Clip。
另一种(后面简称方法二)是在Project窗口的空白地方右键单击,选择Create-&Animation创建出来的Animation Clip。
这两种方法创建出来的都是.anim文件,但是在使用上却有点不一样。
选中方法一创建的.anim文件,Inspector窗口只有一个Wrap Mode选项。
而方法二创建的.anim文件的Inspector却比较复杂。
如果将Inspector切换为Debug模式,
可以看到方法一的.anim文件的Animation Type是1,
而方法二的.anim文件的Animation Type是2。
两种.anim文件都可以拖拽进GameObject身上挂载的Animation组件中,
也都可以在Animation窗口中编辑。
但是如果将方法二的.anim文件拖拽进Animation组件,并作为组件的默认Clip的话,那么游戏运行的时候这个Clip其实是播不出来的,而且Console会报一条“The AnimationClip 'XXX' used by the Animation component 'XXX' must be marked as Legacy.”的警告信息,以及一条“Default clip could
not be found in attached animations list”的提示信息。也就是说方法二的.anim文件其实似乎不能直接用在Animation组件中。
但是方法二的.anim文件却可以拖拽进Animator窗口,作为Animator Controller的一个状态(需要先创建一个Animator Controller),当GameObject身上挂载着Animator,并且Animator引用了这个Animator Controller的时候,这个动画是可以正常播出的。
而方法一的.anim文件却无法拖拽进Animator的窗口。也就是说方法一的.anim文件似乎不能用在Animator中。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:185400次
积分:2720
积分:2720
排名:第11263名
原创:84篇
评论:159条
(1)(2)(1)(1)(2)(1)(1)(2)(1)(4)(5)(2)(2)(1)(3)(2)(1)(1)(1)(4)(3)(3)(2)(1)(1)(3)(4)(3)(1)(10)(3)(4)(2)(4)(7)求助:怎么利用新版的动画系统获取动画片段的长度?_unity3d吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:66,922贴子:
求助:怎么利用新版的动画系统获取动画片段的长度?收藏
看了mayaxiaoan的新版动画教学视频,果断就去尝试了下小甜甜~把一个使用animation的GO改成用animator的GO,但是使用过程中发现了两个问题:一、var animationState = GetComponent(cat_Animation);animationState.PlayDie();yield WaitForSeconds(animation["Die"].length);本来可以这样控制动画播放,然后死亡动画执行完后就删除对象掉宝物。新版的小甜甜,该怎么获得动画片段的长度呢?二、我在设置第二层以下的动画层时,感觉用 empty_state 作物默认开始状态感觉会比较方便,这样某些情况可以不用另外设置这一动画层的权重,条件满足就自动跳转。这样会不会很不科学呢?求助专业动画师……
这样设置,在从null_State到其他state的时候会报错,但是在实际播放时感觉效果还算ok.error:transform.position assign attempt for 'root(Clone)' is not valid. Input position is { NaN, NaN, NaN }UnityEditor.DockArea:OnGUI().
火星时代作为专业unity3d研发培训机构,依靠多年游戏教学实力,让您快速成为u3d工程师.毕业月薪&12000起&.详情请点击&&&
1 新版的Animator因为可以自动混合所以无法获取精确长度,但是可以通过GetCurrentAnimationClipState来获取当前的Clip进而得知进入什么状态。2 层一般是用来无视state或者独立state来混合进当前动画的,默认当然可以为空~~~在那个视频里演示的也是留空的,所以这个报错应该不是因为这个原因呢~。。。
哈哈,这个我专门深刻研究了下,发现animator动画是过度的,在状态机右边有曲线表示过度具体情况。也就是说动画不可能精确知道时间了,如果你确实达到播放动画精确控制转换条件可以这么做://获取动画的hash值,层 (打点)状态名称int JumpState = animator.StringToHash(&Base Layer.Jump&);比如我现在要获取跳状态的时间(包括过度)然后在update中void Update(){if(我按空格键触发跳跃)
{ animator.setBool(&jump&,true); } //然后我想只跳跃一次或者只播放一遍跳跃动画就转换成别的动画状态 AnimatorStateInfo cruState = animator.GetCurrentAnimatorStateInfo(0);AnimatorStateInfo nextState = animator.GetNextAnimatorStateInfo(0);if(nextState.nameHash != jumpState && curState.nameHash !=jumpState){animator.setBool(&jump&,false);}//这样就能完美的切换到别的状态了}
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
Unity3D研究院之使用Animation编辑器编辑动画(五十四)
Unity3D研究院之使用Animation编辑器编辑动画(五十四)
围观131202次
编辑日期: 字体:
Unity提供了Animation编辑器,它可以为我们编辑物理动画。举个例子比如场景中有一个来回摇动的秋千,这个秋千在项目中完全只起到衬托作用,它不会与别的游戏对象有任何交互。如果这个秋千也用代码来写控制它来回摇动,会感觉小题大做。此时完全可以使用Animation编辑器来完成。但是它目前还不能编辑 FK 和 IK动画,所以编辑器中编辑动画的种类还是有限的,如果有一天FK 和 IK动画都可以在Unity中编辑了 那就给力了嚯嚯。。。如下图所示,首先在Hierarchy视图中创建一个游戏对象,这里我就创建一个立方体Cube对象。鼠标保持选中状态,然后在Unity导航菜单栏中选择Window-&Animation将呼出动画编辑窗口。
如下图所示,Animation窗口弹出后,点击左上角那个“小红点”按钮。因为默认新建的Cube对象是没有动画的,所以这里将弹出创建动画窗口。在窗口中点击Save,此时一个名叫New Animation的动画文件将被保存在Project视图中。
如下图所示,此时动画将处于编辑中模式, 在右上方空白处点击鼠标右键,即可添加一个Frame , 点击Frame就会出现一道竖向的红线,上面对应着Frame的时间,这时候在左侧Transform中可以修改每一帧模型的位置,或者在编辑器中也可以修改,数值同样会被保存在每一帧的Transform中。
当你的帧编辑完成后,点击上图左上角那个运行的按钮。你可以在游戏视图中看到这个立方体对象已经按照我们设定的每帧的位置在播放动画了。图中左下角Show:all右侧可以设置动画的播放类型。为了看的清楚,这里我选择PING PONG让动画来回一直播放。动画编辑完成后,点击图中左上角“小红点”按钮 退出动画编辑模式。
退出动画编辑模式后,如下图所示,将刚刚编辑完的动画剪辑拖拽至立方体对象的Animation中,勾选Play Automatically自动播放。此时运行游戏你会发现立方体对象已经按照之前编辑的方式播放动画。
上面介绍的方式我没有写任何一行代码,如果你想动态的监听一些播放事件, 比如当播放几秒的时候执行几行代码。此时你可以使用动画的事件来完成。先创建一条普通的脚本。把它绑定在Cube对象身上。在脚本中我写了两个方法 Event0()和Event1()。
123456789101112131415
using UnityEngine;using System.Collections;&public class NewBehaviourScript : MonoBehaviour{ void Event0() {
Debug.Log("Event0"); }& void Event1() {
Debug.Log("Event1"); }}
我们继续呼出Animation编辑窗口,如下图所示,在时间轴的空白处单机鼠标右键可以添加一个动画事件。 然后会弹出Edit Animation Event窗口,中间有一个Function的选项,Event0()就会对应到上面代码中 Event0的方法。你还可以在脚本中继续添加方法,在Function:的下拉菜单中都会看到。图中我在0:10处添加了一个动画事件,对应在Event0方法中,那么当动画播放0.10s的时候程序将会进入Event0方法中。
怎么样?动画事件还是比较好理解吧。讲到这里你是不是想问我?能不能让美术把动画都在Unity中来完成。答案是否定的,因为它不支持FK 和IK动画,骨骼连带动画还是得在3DMAX 或maya中来完成。如下图所示你也可以打开一个美术在3DMAX 或者 maya中做的动画,这里会显示Read-only表示只读,你不能继续修改它。
Animation编辑器只能修改当前节点的动画,如果你想编辑它的子节点动画的话。只需现在父节点中找到某个子节点对象,然后在window-&Animation中呼出编辑器窗口即可开始编辑。
一口气写了这么多,最后祝大家学习愉快。哇咔咔。
本文固定链接:
转载请注明:
雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!

我要回帖

更多关于 animation clip 的文章

 

随机推荐