美文网首页
Animation组件(二)

Animation组件(二)

作者: 胤醚貔貅 | 来源:发表于2017-06-08 21:29 被阅读238次

变量:

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

相关文章

网友评论

      本文标题:Animation组件(二)

      本文链接:https://www.haomeiwen.com/subject/csntqxtx.html