播放没有混合的动画。
旧版:这是一项旧版功能,不建议使用。请使用 Animator.Play。
如果没有提供名称,则将播放默认动画。在无法播放该动画的情况下
(例如,当没有默认动画或没有指定名称的动画时),该函数将返回 false。通过可选 PlayMode 可选择该动画会对其他已播放动画产生的影响。
如果该指定动画已经在播放,则其他动画将停止,但该动画不会倒回到开头。当已到达该动画的末尾时,其将自动停止并倒回到开头,除非已将 PlayMode 设置为 Loop。如果在帧更新期间在某个对象上调用了 Animation.Play,并且在这期间还停用了此对象,则相当于取消此调用。当稍后重新激活此对象时,该动画将不会开始播放。但如果在后续帧上进行此调用(当此对象仍处于非活动状态时),则在重新激活后该动画将开始播放。
要使用 Animation.Play,动画数据必须在 Inpsector 窗口中显现。此窗口以数组的形式包含了 GameObject 的所有动画。例如,两个动画 jump
和 spin
存储在动画列表中。Animation.Play 可以分别播放这两个动画中的每一个。Animation 也可以组合这两个动画。对此使用了 AnimationState.jump
(不受支持且无相关文档)。例如,将 jump
置于第 0 层并将 spin
移到第 123 层,这样将允许它们一起播放。
using UnityEngine;
// Animation.Play example. Let the S and J keys start // a spin or jump animation. Let Space play back spin and // jump at the same time. Let Z play spin and jump with // spin doubled in speed. // // Spin: rotate the cube 360 degrees in half or one second // Jump: bounce up to 2 units and down in one second // // Note: AnimationState.layer is no longer supported, but still exists.
public class ExampleScript : MonoBehaviour { private Animation anim;
void Start() { anim = gameObject.GetComponent<Animation>(); anim["spin"].layer = 123; }
// double the spin speed when true private bool fastSpin = false;
void Update() { // leave spin or jump to complete before changing if (anim.isPlaying) { return; }
if (Input.GetKeyDown(KeyCode.S)) { Debug.Log("Spinning"); anim.Play("spin"); }
if (Input.GetKeyDown(KeyCode.J)) { Debug.Log("Jumping"); anim.Play("jump"); }
// combine jump and spin if (Input.GetKeyDown(KeyCode.Space)) { Debug.Log("Jumping and spinning"); anim.Play("jump"); anim.Play("spin"); }
// have spin speed reverted to 1.0 second if (fastSpin == true) { anim["spin"].speed = 1.0f; fastSpin = false; }
if (Input.GetKeyDown(KeyCode.Z)) { Debug.Log("Jumping and spinning in half a second"); anim.Play("jump"); anim["spin"].speed = 2.0f; anim.Play("spin");
// we've used spin at a speed of two, now mark // the spin speed to revert back to one fastSpin = true; } } }