任何一个FBX模型拖拽到Hierarchy面板中或者场景中,Inspector面板中发现其被自动添加了一个Animation组件
脚本中的应用
小写的animation指的是该脚本附着的GameObject上的Animation组件
---属性----------------------------------------------------------------------------------------
Clip--》默认动画。
playAutomatically--> 默认的动画片段是否在游戏运行时自动播放。
wrapMode-->
动画片段播放到了结尾,如果程序没有修改它的wrapMode
isPlaying 角色此时是否在播放动画?
this[string name] 他的返回值类型是AnimationState(动画状态)
Stop( ) 停止所有当前正在播放的动画。
Rewind (string AnimationName) 导播名为AnimationName的动画片段
Play( string AnimationName )---->一般不用
CrossFade( string animation , float time , PlayMode mode ) 有淡入名为animation的动画并淡出当前正在播放的动画的效果
1. animation.CrossFade( "Walk" ); 以默认方式淡入名为“Walk”的动画,
2. animation.CrossFade( "Walk",0.3f );在0.3秒左右淡入名为“Walk”的动画;
3. animation.CrossFade( "Walk",0.3f,PlayMode.StopsameLayer ) 这句代码与上句是一样的,只是第二句省略了第三个参数。这个参数的类型为PlayMode,里面有两个属性:PlayMode.StopSameLayer,StopAll,第一个属性
表示停止同一层的动画,当函数中没有此参数时,默认用的就是这个属性;第二个属性表示停止所有的动画。
动画层Animation Layers
可以混合任意数量的动画片段. 你可以手工分配权重或者直接使用animation.CrossFade(),来自动分配权重.
例如现在你有一个射击动画, 一个空闲站立,一个走动循环 . 你需要在走和站两个动作间持续的淡入淡出(在玩家走动速度的基础上) 但当玩家射击时我们只想展示射击动画. 因而射击动画此时的优先度最高.
为了达到这一目的最简单的方法是在射击时简单的保持 walk 和 idle动画. 接下来需要确定shoot animation在一个比idle 和walk更高的层. 这意味着shoot animation 将首先收到混合权重. walk 和idle 只有在 shoot animation不使用 100% 混合权重的情况下接收权重. 所以当 CrossFading the shoot animation in, 权重将从0开始很短时间内到达 100%. 在开始阶段 walk 和idle 层将依然可以收到混合权重 但当 shoot animation 完全切入时, 他们就收不到权重了. 这才是我们需要的!
function Start () {
// Set all animations to loop 设置所有动画为循环
animation.wrapMode = WrapMode.Loop;
// except shooting 除了射击(不循环)
animation["shoot"].wrapMode = WrapMode.Once;
//放置idle 和 walk 进低一级别的 layers (默认 layer 总是 0)
// This will do two things这将作两件事情
// - 当 calling CrossFade时,由于shoot 和 idle/walk 在不同的layers 中
// 它们将不会影响互相之间的重放.
// - 由于 shoot 在高一级的 layer, 当faded in 时shoot动画将替换
// idle/walk 动画 .
animation["shoot"].layer = 1;
// Stop animations that are already playing停止已经播放的动画
//(万一 user 忘记的话,自动disable播放)
animation.Stop();
}
function Update () {
// Based on the key that is pressed,基于按下的键
// play the walk animation or the idle animation播放走,站动画
if (Mathf.Abs(Input.GetAxis("Vertical")) > 0.1)
animation.CrossFade("walk");
else
animation.CrossFade("idle");
// Shoot射击
if (Input.GetButtonDown ("Fire1"))
animation.CrossFade("shoot");
}
默认情况下 animation.Play() 和 animation.CrossFade() 将停止或淡出在同一层里面的动画. 这是我们在绝大多数情况下需要的. 在我们shoot, idle, run 范例中, 播放 idle 和 run 将不会影响到 shoot动画 反之亦然 (you can change this behavior(行为) with an optional parameter(任意参数) to animation.CrossFade if you like).