Unity游戏开发之游戏动画(Unity动画系统) |
您所在的位置:网站首页 › 替身面板有哪些属性 › Unity游戏开发之游戏动画(Unity动画系统) |
文章目录
Unity动画系统动画片段 Animation Clip在Unity中制作动画动画复用
替身系统 AvatarAnimator 组件 Animator Component动画状态机 Animator Controller动画状态动画状态的类型动画状态的属性
动画状态机----动画转换转换属性的配置面板
动画状态机---层级和参数Layers 用于组合动画
Unity动画系统
Unity动画系统分为 动画片段 Animation Clip: 动画资源,与模型无关动画状态机 Animator Controller:帮助我们跟踪当前动画的播放状态,并且根据设置觉得如何切换动画片段动画组件 Animator Component:玩家角色需要播放动画功能时,需要动画组件,将游戏对象需要的动画状态机(以及替身)放入该组件,之后便可以在游戏脚本中自由访问该组件,从而自由控制游戏对象动画。替身 Avatar:人形动画骨骼的标准,所有按照同一标准配置好的人形角色都可以播放同一套动画。 动画片段 Animation Clip 在Unity中制作动画 点击Window,打开animatioin窗口选中需要制作动画的物体,点击create,选择一个位置保存。 Unity为我们在保存位置生成了一个动画片段(.anim) 文件和一个pivet 动画状态机(.controller), 并且,在需要制作动画的物体上挂在了一个 Animator组件注:动画片段文件(.anim)是使用标记语言YAML编写的文件(Unity中绝大多数文件都是使用YAML来记录的) 选中物体,切换到Animation视图,选中这里的add Property,选择要对哪些属性进行变换![]() ![]() ![]() 当动画文件只对应一个物体的时候,可以复用到任何一个物体上。 当动画文件要处理多个物体或多个游戏对象时,会在文件中写上该物体的对象名称,unity会通过文件里的这个名称找到正确的游戏对象。 如果游戏对象的名字和动画文件中的不一致,就无法正常播放。 动画复用,当骨骼结构一致,命名也一致,就可以对动画文件进行复用。 当骨骼结构相似,但动画命名不一致时,修改命名以及骨骼系统就可以复用动画,但Unity对人形骨骼有简便的处理方式:Avator 替身系统 Avatar当两个角色的命名方式不一样时,动画不能复用。 如下:名称不匹配,会在Animation窗口显示Missing! 添加单独动画片段的三种方法 1. 新建空状态,再添加动画 2. 选中动画,右键添加 3. 直接拖动动画 多个动画片段组成的混合书 Blend Tree另一个动画状态机 动画状态的属性 名称:修改状态机中展示的文本,以便管理标签Tag:给不同的动画状态打上标签进行分类,可在脚本中便于统一管理 //获取当前状态机正在播放的动画状态 AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(animator.GetLayerIndex("层级名称")); //通过标签对不同的标签动画,做不同的事 if(stateInfo.isTag("标签名称")){ ...... } Motion :动画片段或混合树Speed:动画的播放速度(不能通过脚本更改)Multiplier:动画实际速度为Speed与Multiplier的乘积(设置Parameter后,可通过脚本修改参数)Motion Time:播放动画的时间点(注意:只会播放单帧)【适合制作单帧2D动画】Mirror:镜像动画Cycle Offset:动画播放的起始位置[0,1]Foot IK:使用了IK的动画矫正机制Write Defaults :默认开启,是否为其运动未动画化的属性写回默认值。但是有很大的坑,一般情况下禁用。 [Unity] AnimatorStates中的write defaults详解:https://blog.csdn.net/rickshaozhiheng/article/details/77838379 动画状态机----动画转换点击状态,可看到状态下的所有转化。 如果有勾选Solo的转化,只对勾选Solo的状态转换, 哪个转换的条件先满足,就执行哪个转换。如果条件同时满足,则执行最上面的转换 如果没有勾选Solo的转换对勾选了Mute的转换永远不会执行 转换属性的配置面板 Has Exit Time : 当前动画状态播放到某个时间点的时候,就执行这个转换。如果不勾选,就必须在Conditions下对转换添加其他条件。展示图![]() 越向下,优先级越高 Parameters //修改参数值 animator.SetFloat("参数名称",值); animator.SetBool("参数名称",值); //内部会自动转为Hash值,及如下方法 animator.SetFloat(Animator.StringToHash("参数名称"),值); //获取参数值 animator.getInt("参数名称"); |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |