Unity3D中Animation的常见属性及方法

2015年01月14日 16:10 0 点赞 0 评论 更新于 2025-11-21 14:23

在Unity3D中,Animation是一个常用的组件。本文将详细介绍Unity3D中Animation的常见属性及方法。

Animation.Play(播放)

方法定义

function Play (mode : PlayMode = PlayMode.StopSameLayer) : bool
function Play (animation : string, mode : PlayMode = PlayMode.StopSameLayer) : bool

功能说明

Play() 方法用于开始播放动画。如果不传入动画名称,将播放默认动画;若传入动画名称,则播放指定名称的动画。动画会突然开始播放,没有任何混合效果。

  • modePlayMode.StopSameLayer 时,同一层的所有动画将停止播放。
  • modePlayMode.StopAll 时,所有正在播放的动画将停止播放。

特殊情况

  • 如果动画已经在播放,其他动画会停止,但当前动画不会回退到开始位置。
  • 如果动画未设置为循环模式,播放结束后将停止并回退到开始位置。
  • 如果无法播放动画(例如没有动画剪辑或没有默认动画),Play() 方法将返回 false

示例代码

// 播放默认动画
animation.Play();

// 播放walk动画,停止同一层的其他动画
animation.Play("walk");

// 播放walk动画,停止所有其他动画
animation.Play("walk", PlayMode.StopAll);

Animation.CrossFade(淡入淡出)

方法定义

function CrossFade (animation : string, fadeLength : float = 0.3F, mode : PlayMode = PlayMode.StopSameLayer) : void

功能说明

该方法用于在一定时间内淡入指定名称的动画,并淡出其他动画。

  • modePlayMode.StopSameLayer 时,同一层的动画将在淡入指定动画时淡出。
  • modePlayMode.StopAll 时,所有动画将在淡入指定动画时淡出。

如果动画未设置为循环模式,播放完成后将停止并倒带至开始位置。

示例代码

// 淡入walk循环,淡出同一层的所有其他动画,在0.2秒内完成淡入淡出
animation.CrossFade("Walk", 0.2);

// 让角色包含Run和Idle动画,根据玩家输入在两者之间淡入淡出
function Update () {
if (Mathf.Abs(Input.GetAxis("Vertical")) > 0.1)
animation.CrossFade("Run");
else
animation.CrossFade("Idle");
}

Animation.Sample(采样)

方法定义

function Sample () : void

功能说明

Sample() 方法用于在当前状态对动画进行采样。当你需要明确设置一些动画状态并对其进行一次采样时,该方法非常有用。

示例代码

// 设置一些状态
animation["MyClip"].time = 2.0;
animation["MyClip"].enabled = true;

// 取样动画
animation.Sample();
animation["MyClip"].enabled = false;

Animation.Stop(停止)

方法定义

function Stop () : void

功能说明

Stop() 方法用于停止所有正在播放的动画。

示例代码

// 停止所有动画
animation.Stop();

Animation.this[string name](操作名字)

属性定义

var this[name : string] : AnimationState

功能说明

通过该属性可以获取指定名称动画的 AnimationState 对象,从而对动画的属性(如速度、权重等)进行设置。

示例代码

// 取得walk动画状态并设置其速度
animation["walk"].speed = 2.0;

// 取得run动画状态并设置其权重
animation["run"].weight = 0.5;

Animation.wrapMode(循环模式)

该属性用于指定动画剪辑播放完成之后的操作方式。

取值说明

  • WrapMode.Default:从动画剪辑中读取循环模式(默认是 Once)。
  • WrapMode.Once:当时间播放到末尾时停止动画的播放。
  • WrapMode.Loop:当时间播放到末尾时,重新从开始位置播放。
  • WrapMode.ClampForever:播放动画,当播放到结尾时,动画总是处于最后一帧的采样状态。

示例代码

// 使用动画循环模式
animation.wrapMode = WrapMode.Loop;

综上所述,这些属性和方法为Unity3D中动画的控制提供了丰富的手段,开发者可以根据具体需求灵活运用。

作者信息

feifeila

feifeila

共发布了 3994 篇文章