unity 调用spine
时间: 2025-07-12 18:12:38 浏览: 7
### 在 Unity 中集成和调用 Spine 动画
在 Unity 中集成和调用 Spine 动画需要经过几个关键步骤,包括导入必要的库、设置动画组件以及控制动画的播放。以下是详细的说明:
#### 1. 导入 Spine Runtime 库
为了在 Unity 中使用 Spine 动画,首先需要从官方仓库下载 Spine 的 runtime 库[^1]。具体操作如下:
- 访问 [EsotericSoftware/spine-runtimes](https://github.com/EsotericSoftware/spine-runtimes)。
- 下载最新的 Unity 支持包。
- 将包中的 `spine-csharp` 和 `spine-unity` 部分导入到 Unity 项目中。
完成上述步骤后,Unity 工程将具备支持 Spine 动画的基本能力。
#### 2. 创建 Spine 动画对象
在 Unity 场景中创建一个空物体或现有的游戏对象,并添加以下组件:
- **SkeletonAnimation**:这是 Spine 动画的核心组件,用于加载和渲染动画资源。
- **AnimationState**:通过该组件可以控制动画的状态,例如播放、暂停或切换动画[^2]。
可以通过拖拽 `.skel` 或 `.json` 格式的 Spine 动画文件到场景中自动生成带有这些组件的对象。
#### 3. 控制动画播放
Spine 动画的播放主要依赖于 `AnimationState` 对象。以下是一些常用的 API 方法:
- **SetAnimation**:用于设置当前动画并替换之前的动画。
- **AddAnimation**:用于在当前动画之后添加另一个动画,形成队列。
- **ClearTracks**:清除所有正在播放的动画轨道。
如果在切换动画时遇到残影问题,可以在调用 `SetAnimation` 前执行以下代码来消除前一个动画的影响[^3]:
```csharp
skeletonAnimation.skeleton.SetToSetupPose();
spineAnimationState.ClearTracks();
```
#### 4. 使用事件与回调
Spine 提供了丰富的事件机制,允许开发者监听动画的关键帧事件或完成事件。以下是一个简单的示例:
```csharp
spineAnimation.state.Event += (trackEntry, eventObj) => {
// 处理事件逻辑
Debug.Log($"Event triggered: {eventObj.Data.Name}");
};
```
此外,还可以通过 `Complete` 回调来检测动画是否结束:
```csharp
spineAnimation.state.Complete += (trackEntry) => {
// 动画完成后的逻辑
Debug.Log("Animation completed!");
};
```
### 示例代码
以下是一个完整的示例,展示如何在脚本中控制 Spine 动画的播放:
```csharp
using UnityEngine;
using Spine.Unity;
public class SpineController : MonoBehaviour
{
public SkeletonAnimation skeletonAnimation;
void Start()
{
if (skeletonAnimation == null)
return;
// 设置初始动画
skeletonAnimation.skeleton.SetToSetupPose();
skeletonAnimation.state.ClearTracks();
// 播放指定动画
skeletonAnimation.state.SetAnimation(0, "idle", true); // 循环播放 idle 动画
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
// 切换到另一个动画
skeletonAnimation.state.SetAnimation(0, "attack", false);
skeletonAnimation.state.AddAnimation(0, "idle", true, 0); // 动画结束后回到 idle
}
}
}
```
### 注意事项
- 确保 Spine 动画资源的路径正确无误。
- 如果动画切换时出现异常行为,可能需要调整骨架的初始姿态或清理动画轨道[^3]。
---
阅读全文
相关推荐


















