unity里给ANIMATION k的关键帧max怎么复制关键帧

在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?
标签:至少1个,最多5个
好久没写博文,今天打算和大家分享点小知识,当当当当!那就是Animator!
Animator是Unity中动画控制器的组件,这东西相当于一个动画片段管理器。我们知道Unity中素材可以拖拽到游戏对象上,制作成称为Clip的动画片段,如果该对象没有Animator组件,那么也会同时创建Animator用来管理Clip的切换和触发等。
Animator中我比较常用的是Trigger,这个很多新人也都使用过了,用来从一个动画状态切换到另一个动画中。今天主要介绍的东西有两个,一个是BlendTree,另一个是State Machine Behaviour。如果大家遇到了我遇到过的问题,那么这两个在关键时刻可谓是大杀器般的存在了。
问题一:如何制作2D角色的多向动画
当时我遇到的问题是:一个2D角色,需要四个方向的移动动画,还需要四个方向的攻击动画。当时技术水平所限,我直觉上想到的就是制作8个State,分别处理8段动画,8个trigger,然后在代码中来回切换。后来看到密密麻麻的State和Transition,发觉不对劲,于是数天的谷歌之后,开始学一个叫做BlendTree的东西。
在一个State上右键创建一个新的BlendTree,然后双击进入。在Animator的参数面板中,添加两个float变量xdir和ydir。在Inspector面板中选择BlendType为2D simple directional,参考变量选好。这时下面会出现一个Motion数组,在里面分别设置图中四个点的坐标和四个动画片段,如图所示:
这两个变量xdir和ydir,用来表示角色的朝向,我们会在代码中进行设置。然后BlendTree的神奇之处就在于,能够根据你所设定的不同的值的组合,去寻找对应的motion。比如我现在用
animator.SetFloat("xdir", 1);
animator.SetFloat("ydir", 0);
来设置这两个坐标,那么BlendTree就会自动匹配到第四个动画,我们将其设置为向右的Clip就可以了,其他方向同理。
问题二:如何检测动画播放状态
制作一个死亡动画不是问题,但是死亡之后如何判定动画播放完毕,我们好进行处理呢?比如现在要求死亡动画播完以后,角色保持在死亡的那一帧,禁止播放其他动画。这里我介绍几种方法,不过感觉State Machine Behaviour是最简单的方案。
首先是Add Animation Event。进入Animation面板,选择你需要监听的动画片段,选中触发的关键帧,右键添加动画事件,然后选择你所需要触发的函数就可以了。这样动画播放到这一帧的时候,就会触发你所选择的函数了。
其次是在代码中使用Invoke或者Coroutine,自己估摸一下动画的播放时间,然后调用对应的函数,也可以达到相同的目的,详细方式大家都可以自行百度谷歌。
最后出场的就是State Machine Behavior了!选中一个State之后,在Inspector面板中,点击Add Behavior面板,就添加了一个状态机脚本,双击脚本进入代码编辑器。这里面最常用的三个函数,分别是Enter、Update、Exit函数。分别是进入状态、更新状态、退出状态的时候会调用的函数。我们在死亡状态后面新建一个状态,设置死亡动画播完以后Exit time形式进入这个状态。如图:
在刚添加的脚本中,添加代码:
override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
animator.enabled =
这样角色死亡动画播完以后,会自动切换到一个空状态,切入之前调用这个Exit函数,将动画控制器禁用,完成!
0 收藏&&|&&6
你可能感兴趣的文章
25 收藏,8.5k
1 收藏,997
1 收藏,1.6k
本作品采用 署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可
相比2d toolkit有优势吗
相比2d toolkit有优势吗
做2D游戏这个技术一般是足够应对的,当然你熟悉哪个最好还是用哪个。
做2D游戏这个技术一般是足够应对的,当然你熟悉哪个最好还是用哪个。
分享到微博?
我要该,理由是:Unity3d之Animation(动画系统)
1,动画配置
创建游戏对象并添加Animation,然后将动画文件拖入组件。
进入动画文件的Debug属性面板
选中Legacy属性
选中游戏对象,打开Animation编辑窗口
添加动画变化属性
需改关键帧的属性值
配置完成后运行即可得到动画效果
2,代码控制动画
Play(&ation 1& );,播放动画,传入参数为动画名字
Stop(&ation 1&) ,停止动画,传入参数为动画名字
CrossFade(&ation 1&, 0.5f); ,有过度的切换动画,传入参数(动画名字,过度时间)
using UnityE
using System.C
public class NewBehaviourScript : MonoBehaviour {
Animation m_
private float scaleW = 1.0f;
//宽度缩放比
private float scaleH = 1.0f;
//高度缩放比
// Use this for initialization
void Start () {
//获取动画组件
m_anim = GetComponent();
if (!m_anim.isPlaying)
//若没有动画播放,默认播放New Animation 1动画
m_anim.CrossFade(&ation 1&, 0.2f);
// Update is called once per frame
void Update () {
scaleW = (float)Screen.width / 800;
//计算宽度缩放比
scaleH = (float)Screen.height / 480;
//计算高度缩放比
void OnGUI()
GUI.skin.button.fontSize = (int)(25 * scaleW);
//调整按钮字体大小
if (GUI.Button(new Rect(70 * scaleW, 50 * scaleH, 90 * scaleW, 40 * scaleH), &ation 1&))
m_anim.Play(&ation 1& );
if (GUI.Button(new Rect(70 * scaleW, 110 * scaleH, 90 * scaleW, 40 * scaleH), &imation&))
m_anim.Play(&imation&);
if (GUI.Button(new Rect(70 * scaleW, 170 * scaleH, 220 * scaleW, 40 * scaleH), &有过度播放ation 1&))
m_anim.CrossFade(&ation 1&, 0.5f);
if (GUI.Button(new Rect(70 * scaleW, 230 * scaleH, 220 * scaleW, 40 * scaleH), &有过度播放imation&))
m_anim.CrossFade(&imation&, 0.5f);
将代码添加到游戏对象,运行游戏。unity3d 中如何通过编程控制3d max 中制作好的帧动画_unity3d吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:78,316贴子:
unity3d 中如何通过编程控制3d max 中制作好的帧动画收藏
我已经在3ds max中制作好一个长度为三十五帧的降落伞开伞过程动画,使用了伸缩变形长度变换,自动关键帧功能。现在我把这个fbx模型导入到unity3d中,因为不是骨骼动画所以无法播放,但我不清楚如何将这些已经分好帧的动画在unity3d中显示。如果需要编程,我在网上并没有看到很多可以参考的程序,主要的程序都是利用animation进行的,但animation好像是属于unity中一个功能。我希望知道的是,我是否直接不通过animation进行unity中帧动画的播放,这大概属于变形动画。脚本可以参考哪些内容。如果一定要使用animation,麻烦介绍一下animation到底是如何在控制帧动画中使用的。大神们救救我,感激不尽。
江苏盘锦天燃气模温机,一台省得让你怀疑人生的燃气锅炉
为何不考虑骨骼动画?那样会简单很多!unity的animation和max中k动画的原理一样!只不过将动画信息单独保存了!而且只能为已有的属性k帧,像max里的修改器属性是没有的!
登录百度帐号推荐应用

我要回帖

更多关于 max怎么复制关键帧 的文章

 

随机推荐