Unity 学习--角色动画

任何一个FBX模型拖拽到Hierarchy面板中或者场景中,Inspector面板中发现其被自动添加了一个Animation组件


脚本中的应用

小写的animation指的是该脚本附着的GameObject上的Animation组件

Unity 学习--角色动画_第1张图片

---属性----------------------------------------------------------------------------------------


Clip--》默认动画。 

playAutomatically--> 默认的动画片段是否在游戏运行时自动播放

wrapMode-->

动画片段播放到了结尾,如果程序没有修改它的wrapMode


  1. Once:那么这个动画片段将会自动停止播放,而且其此时播放的帧数被重置为第一帧.
  2. Loop:该动画片段播放完最后一帧之后并不会停止,而会回到第一帧并重复播放
  3. PingPong:将随机的在第一帧与最后一帧之间来回播放
  4. ClampForever:它将会一直播放这个动画状态的最后一帧

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).

你可能感兴趣的:(Unity 学习--角色动画)