Animation组件(二)

变量:

clip

默认的动画剪辑。

playAutomatically

是否在开始的时候自动播放默认的动画(Animation.clip)。

wrapMode :循环模式

WrapMode.Default:

WrapMode.Default:从动画剪辑中读取循环模式(默认是Once)。

WrapMode.Once:

WrapMode.Once:当时间播放到末尾的时候停止动画的播放。

WrapMode.Loop:

WrapMode.Loop:当时间播放到末尾的时候重新播放从开始播放。

WrapMode.PingPong:

WrapMode.PingPong:在开始和结束之间来回播放。

WrapMode.ClampForever:

WrapMode.ClampForever:播放动画。当播放到结尾的时候,动画总是处于最后一帧的采样状态。

using UnityEngine;

using System.Collections;

public class example : MonoBehaviour {

public void Awake() {

animation.wrapMode = WrapMode.Loop;

}

}

//Make the animation loop

//使用动画循环模式。

animation.wrapMode = WrapMode.Loop;

动画剪辑播放完成之后,应该如何操作?

isPlaying

是否在播放任何动画?

this [string name]

返回名称为name的动画状态。

animatePhysics

如果打开这个选项,动画会在物理循环过程中被执行。这个选项只有在结合运动学刚体的时候才有用。

一个动画平台可以应用速度和摩擦到其顶部的刚体。为了使用这个,animatePhysics必须被启用,并且动画物体必须为一个运动学刚体。

animateOnlyIfVisible

如果打开这个选项,Unity可能在它认为用户不会看到当前动画的时候停止播放。

当你有一些动画在视口之外播放的时候,这个选项可以帮助你节省一些性能,比如那些只有在用户实际上看得见的物体做动画的时候。

Functions 函数:

Stop:

停止单签Animation正在播放的动画。

function Stop () : void

animation.Stop();

• function Stop (name : string) : void

停止播放名称为name 的动画

停止一个动画会让动画重回开始位置

eg:animation.Stop("Walk");

Rewind:倒回;

function Rewind (name : string) : void

animation.Rewind("walk");

倒回名称为name的动画;

function Rewind () : void

倒回所有动画;

animation.Rewind();

Sample:采样:

function Sample () : void

在当前状态对动画进行采样,当你明确想要设置一些动画状态并且对它取样一次的时候有用。

// Set up some state;

// 设置一些状态;

animation["MyClip"].time = 2.0;

animation["MyClip"].enabled = true;

// Sample animations now.

// 取样动画。

animation.Sample();

animation["MyClip"].enabled = false;

IsPlaying:是否在播放:

function IsPlaying (name : string) : bool

名为name的动画是否正在播放;

Play:播放:

function Play (mode : PlayMode = PlayMode.StopSameLayer) : bool

function Play (animation : string, mode :

PlayMode = PlayMode.StopSameLayer) : bool

没有任何混合的播放动画;

Play()将开始播放名称为animation的动画,或者播放默认的动画,动画会突然开始播放没有任何的混合。

如果模式是PlayMode.StopSameLayer,那么所有在同一个层的动画将停止播放。如果模式是PlayMode.StopAll,那么所有当前在播放的动画将停止播放。

如果动画已经在播放过程中,别的动画将停止但是动画不会回退到开始位置。

如果动画没有被设置成循环模式,它将停止并且回退到开始位置。

如果动画不能被播放(没有动画剪辑或者没有默认动画),Play()将返回false

// Plays the walk animation - stops all other animations in the same layer

// 播放walk动画 - 停止同一层的其他动画。

animation.Play("walk");

// Plays the walk animation - stops all other animations

// 播放walk动画 - 停止其他动画。

animation.Play("walk", PlayMode.StopAll);

CrossFade:淡入淡出

function CrossFade (animation : string, fadeLength

: float = 0.3F, mode : PlayMode = PlayMode.StopSameLayer)

: void

在一定时间淡入名称为name的动画并且淡出其他动画,

如果模式是PlayMode.StopSameLayer,在同一层的动画将在动画淡入的时候淡出。如果模式是PlayMode.StopAll,所有动画将在淡入的时候淡出

如果动画没有被设置成循环,它将停止并且在播放完成之后倒带至开始。

eg:

animation.CrossFade("Walk", 0.2);

function Update () {

if (Mathf.Abs(Input.GetAxis("Vertical")) > 0.1)

animation.CrossFade("Run");

else

animation.CrossFade("Idle");

}

CrossFadeQueued:淡入淡出列

function Update () {

if (Mathf.Abs(Input.GetAxis("Vertical")) > 0.1)

animation.CrossFade("Run");

else

animation.CrossFade("Idle");

}

在前一个动画播放完成之后淡入淡出下一个动画。

如果queue为QueueMode.CompleteOthers这个动画只在所有其他动画都停止播放时才开始。

如果queue为QueueMode.PlayNow这个动画将以一个复制的动画状态立即开始播放。

动画播放完成后它将自动清除它自己。在它播放完成后使用赋值的动画将导致一个异常。

function Update () {

if (Input.GetButtonDown("Fire1"))

animation.CrossFadeQueued("shoot", 0.3, QueueMode.PlayNow);

}

PLayQueued:

在前一个动画播放完成后直接播放下一个动画。

function PlayQueued (animation : string, queue : QueueMode = QueueMode.CompleteOthers, mode : PlayMode = PlayMode.StopSameLayer) : AnimationState

比如你可能会一个接一个播放一个特殊序列的动画。

动画状态在播放之前会复制自己,因此你可以在相同的动画之间进行淡入淡出。这个可以用于覆盖两个相同的动画。比如你可能有一个剑挥舞的动画,玩家连续快速削两次。你可以倒播这个动画然后从头再播放但是你会看到动画之间有跳越现象。

如果queue是QueueMode.CompleteOthers,当所有其他动画停止播放,这个动画才会开始。

如果queue是QueueMode.PlayNow,这个动画将在一个重复的动画状态下立即开始播放。

当动画完成播放之后,它会自动清理。在一个动画状态结束之后使用它,将会导致一个异常。

function Update () {

if (Input.GetButtonDown("Fire1"))

animation.PlayQueued("shoot", QueueMode.PlayNow);

}

AddClip:添加剪辑

function AddClip (clip : AnimationClip, newName : string) : void

给动画添加一个名称为newName的动画剪辑。

• function AddClip (clip : AnimationClip, newName : string, firstFrame : int, lastFrame : int, addLoopFrame : bool = false) : void

在播放的firstFrame和lastFrame之间添加动画剪辑。新的动画剪辑也会被添加到名称为newName的动画中。

addLoopFrame:

是否在第一帧之后添加一个额外的帧?如果你在制作一个循环的动画,那么可以打开这个选项。如果那么名称的动画剪辑已经存在,那么会被新的动画剪辑覆盖。

/ Split the default clip into a shoot, walk and idle animation

// 把默认的动画剪辑拆分成一个shoot,walk和idle的动画。

animation.AddClip(animation.clip, "shoot", 0, 10);

// walk and idle will add an extra looping frame at the end

// walk和idle动画剪辑会在结尾被添加一个额外的循环帧。

animation.AddClip(animation.clip, "walk", 11, 20, true);

animation.AddClip(animation.clip, "idle", 21, 30, true);

Animation.RemoveClip:移出剪辑:

function RemoveClip (clip : AnimationClip) : void

从动画列表中移除剪辑。

这将去掉剪辑和所有基于这个剪辑的动画状态。

• function RemoveClip (clipName : string) : void

从动画列表移除剪辑。

这将去掉名称为name的动画状态。

GetClipCount:获取剪辑数:

function GetClipCount () : int

取得当前动画的动画剪辑数量;

SynLayer:同步层:

function SyncLayer (layer : int) : void

同步某层的动画的播放速度;

在混合两个循环动画的时候,他们通常有不同的长度。比如一个走路的动画通常比一个跑步的动画要长。当混合他们的时候,你需要确定走路和跑步动画发生的时候脚的位置要在同一时间走动。换句话说,这两个动画播放速度要被调整一致,以便动画的同步。SyncLayer函数将根据动画的混合权重来计算同一层中动画的平均正常播放速度。然后它会给同一层的所有动画应用这个播放速度。

// Puts the walk and run animation in the same

// layer and synchronizes their speed

// 把walk和run动画放到同一层,然后同步他们的速度。

animation["walk"].layer = 1;

animation["run"].layer = 1;

animation.SyncLayer(1);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,099评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,473评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,229评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,570评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,427评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,335评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,737评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,392评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,693评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,730评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,512评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,349评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,750评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,017评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,290评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,706评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,904评论 2 335

推荐阅读更多精彩内容