unity animator播放动画
时间: 2025-06-16 17:04:03 浏览: 14
### 如何在 Unity Animator 中播放动画
#### 使用 `Animator` 组件播放指定动画片段
为了通过代码控制特定动画片段的播放,可以利用 `Animator.Play()` 方法。此方法允许开发者直接触发状态机中的某个状态对应的动画。
```csharp
using UnityEngine;
public class PlaySpecificAnimation : MonoBehaviour {
private Animator _animator;
void Start() {
_animator = GetComponent<Animator>();
// 假设要播放名为 "Walk" 的动画
_animator.Play("Walk");
}
}
```
当需要确保只在一个条件满足的情况下才启动新的动画序列时,可以在逻辑判断之后调用上述函数[^1]。
#### 动态调整动画速度以实现暂停/恢复效果
除了简单的播放操作外,有时还需要能够动态改变正在运行的动画的速度,比如让其暂时停止或是慢动作回放等特殊视觉效果。这可以通过设置 `Animator.speed` 属性来达成:
```csharp
_animator.speed = 0; // 完全暂停动画
// 或者...
_animator.speed = 0.5f; // 减半正常速度播放
```
一旦想要恢复正常速率,则只需重置该属性值为默认的 1 即可[^3]。
#### 判断并响应动画结束事件
对于某些应用场景而言,在得知某一特定动画已经完全执行完毕后再采取进一步行动是非常重要的。为此,Unity 提供了一种基于时间标准化的方式——即通过比较 `normalizedTime` 参数与预定义阈值(通常接近于 1 表示即将结束),配合 `IsName()` 来确认具体名称匹配情况从而检测目标动画是否到达结尾处:
```csharp
if (_animator.GetCurrentAnimatorStateInfo(0).normalizedTime >= 0.99f &&
_animator.GetCurrentAnimatorStateInfo(0).IsName("Target Animation Name")) {
Debug.Log("The target animation has finished playing.");
// 执行后续处理...
}
```
这种方法不仅适用于单次性的回调通知,也可以作为循环内持续监测的一部分,以便及时作出反应[^4]。
#### 获取当前活动的动画信息
如果希望实时跟踪当前处于激活状态下的确切动画条目,那么应当查阅 `GetCurrentAnimatorStateInfo(int layerIndex)` 返回的对象实例。它包含了丰富的元数据字段用于描述所选图层上此刻正被渲染出来的画面特性,例如名字、长度以及相对位置等等。下面是一个简单例子展示怎样查询当前显示的是不是预期中的跑步姿态:
```csharp
AnimatorStateInfo stateInfo = _animator.GetCurrentAnimatorStateInfo(0);
bool isInRunningPose = stateInfo.IsName("Run");
Debug.Log($"Current pose is {(isInRunningPose ? "running." : "not running.")}");
```
以上就是关于如何运用 Unity 的 `Animator` 控件来进行基本动画管理的一些指导说明[^5]。
阅读全文
相关推荐


















