Version: 2022.3
public bool Play (PlayMode mode= PlayMode.StopSameLayer);
public bool Play (string animation, PlayMode mode= PlayMode.StopSameLayer);

描述

播放没有混合的动画。

如果没有提供名称,则将播放默认动画。在无法播放该动画的情况下 (例如,当没有默认动画或没有指定名称的动画时),该函数将返回 false。通过可选 PlayMode 可选择该动画会对其他已播放动画产生的影响。

如果该指定动画已经在播放,则其他动画将停止,但该动画不会倒回到开头。当已到达该动画的末尾时,其将自动停止并倒回到开头,除非已将 PlayMode 设置为 Loop。如果在帧更新期间在某个对象上调用了 Animation.Play,并且在这期间还停用了此对象,则相当于取消此调用。当稍后重新激活此对象时,该动画将不会开始播放。但如果在后续帧上进行此调用(当此对象仍处于非活动状态时),则在重新激活后该动画将开始播放。

To use Animation.Play the animation data must be visible in the Inspector window. This window contains all animations for a GameObject in an array. As an example two animations jump and spin are stored in the Animations list. Animation.Play can play each of these animations. Animation can also combine animations. An (unsupported and undocumented) AnimationState.layer is used for this. For example leaving jump at layer zero and moving spin to layer 123 will allow them to be played together.

动画在检视面板中必须标记为“Legacy”才能被此方法发现。将 Inspector 窗口切换为“Debug”后,会显示此选项。

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