bool 如果没有提供名称并且没有默认动画,则此方法返回 false
。否则,它返回 true
。
播放动画,不进行混合。
如果没有提供名称,则会播放默认动画。使用可选的 PlayMode 来选择此动画如何影响正在播放的动画。
如果指定的动画正在播放,则其他动画将被停止,但动画不会倒回开头。动画结束时,它将自动停止并倒回开头,除非 PlayMode 设置为 Loop。如果在帧更新期间对已 停用 的对象调用 Animation.Play,则该调用将被有效地取消。该动画在对象稍后重新激活时不会开始播放。但是,如果在后续帧(对象仍然处于非活动状态时)调用该方法,则动画将在重新激活后开始播放。
要使用 Animation.Play,动画数据必须在 Inspector 窗口中可见。此窗口包含 GameObject 中所有动画的数组。例如,两个动画 jump
和 spin
存储在 Animations 列表中。 Animation.Play 可以播放这些动画中的每一个。 Animation 也可以组合动画。为此,使用了(不受支持且未记录的) AnimationState.layer
。例如,将 jump
放在层 0,将 spin
移动到层 123,将允许它们一起播放。
必须在 Inspector 中将动画标记为“传统”,才能使此方法找到这些动画。在将 Inspector 窗口切换到“调试”后,将显示此选项。
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; } } }