Spine with Unity Mecanim
前言
最近这两天刚刚接触Spine,研究了一下Unity Mecanim Animator如何控制Spine,在此分享记录一下,如有不当之处,请留言指出,欢迎讨论。
Unity & Spine
想要在Unity中使用Spine动画,目前有三种方式。
第一种,利用SkeletonAnimation,这是Spine提供的原生方式,支持所有Spine功能。
第二种,利用Mecanim (or SkeletonAnimator),使用此方式Spine-unity会将SkeletonData中的动画转换为一系列AnimationClips ,并生成一个Unity Animator Controller。
SkeletonAnimator
组件关联Unity Animator 和 Spine Animation ,并利用Spine Animation API Mix 和 Aplly 方法控制动画。这允许我们使用Unity的原有流程控制动画。
但是可能有些副作用关于attachment keyframes,可能很难追踪问题。attachment keyframes目前我还没有研究到。
第三种,利用Baking,这个不推荐,这个是专门为了那些没有spine runtime的准备的。使用此方式无法使用Spine特有的功能。
Spine with Unity Mecanim
第零步,准备资源,下载官方的Spine Uinty Package, 里面有一些示例场景。今天我们要改造一下Controling Animation Continued这个场景。
原场景使用第一种方式控制动画。我们把它改造成使用第二种方式控制动画。
第一步,新建脚本MyRaptor ,并将脚本添加到raptor Skeleton。脚本内容如下:
using UnityEngine;
using System.Collections;
using Spine.Unity; namespace Ron.Tang {
public class MyRaptor : MonoBehaviour { #region Inspector
[SpineAnimation]
public string walk = "walk"; [SpineAnimation]
public string gungrab = "gungrab"; [SpineAnimation]
public string gunkeep = "gunkeep"; [SpineEvent]
public string footstepEvent = "footstep"; public AudioSource footstepAudioSource;
#endregion SkeletonAnimation skeletonAnimation;
Animator myAnimator; void Start () {
//skeletonAnimation = GetComponent<SkeletonAnimation>();
//skeletonAnimation.AnimationState.Event += HandleEvent;
myAnimator = GetComponent<Animator>();
StartCoroutine(GunGrabRoutine());
} void footstep()
{
footstepAudioSource.pitch = 0.5f + Random.Range(-0.2f, 0.2f);
footstepAudioSource.Play();
} IEnumerator GunGrabRoutine () { while (true) {
yield return new WaitForSeconds(Random.Range(0.5f, 3f));
//skeletonAnimation.AnimationState.SetAnimation(1, gungrab, false);
myAnimator.SetTrigger("gungrab"); yield return new WaitForSeconds(Random.Range(0.5f, 3f));
myAnimator.SetTrigger("gunkeep");
//skeletonAnimation.AnimationState.SetAnimation(1, gunkeep, false);
} } }
}
通过简单的对比,可以看出把原有使用skeletonAnimation的地方,替换为使用animator。并添加了footstep函数用以响应动画事件。
第二步,从raptor_SkeletonData生成raptor_Controller。点击raptor_SkeletonData在Inspector里面有生成按钮。
第三步,给场景中raptor_skeleton的gameobject添加两个组件Animator 和 Skeleton Animator。并设置Animator 里的Controller为raptor_Controller
以及Skeleton Animator里的SkeletonData Asset 为raptor_SkeletonData。具体如下图所示。

第四步,设置animator controller 里面的 layer ,transition, parameter。如下图所示:



第五步,运行测试,效果和原先保持一致。

PS:上图人物形象及动画乃是Spine官方资源,版权归Spine所有,仅供学习交流使用。
转载请标明出处,谢谢
Spine with Unity Mecanim的更多相关文章
- Spine学习七 - spine动画资源+ Unity Mecanim动画系统
前面已经讲过 Spine自己动画状态机的动画融合,但是万一有哥们就是想要使用Unity的动画系统,那有没有办法呢?答案是肯定的,接下来,就说说如何实现: 1. 在project面板找打你导入的Spin ...
- Unity Mecanim在大型mmo中的应用
http://blog.csdn.net/langresser_king/article/details/37760091?utm_source=tuicool&utm_medium=refe ...
- Unity Mecanim 动画系统
1. Animator 组件 Controller:使用的Animator Controller文件. Avatar:使用的骨骼文件. Apply Root Motion:绑定该组件的GameObje ...
- Unity动态换装之Spine换装
注:转载请注明转载,并附原链接 http://www.cnblogs.com/liaoguipeng/p/5867510.html 燕双飞情侣 一.动态换装原理 换装,无非就是对模型的网格,或者贴图进 ...
- 台北Unity开发者研讨会 笔记
本文转自:http://ndark.wordpress.com/2013/05/12/20130511-台北unity开发者研讨会-笔记/ (墙外) 说明 本文单纯只是笔记,若有笔误敬请见谅. 相关参 ...
- 你跟大牛之间仅仅差一个google
google在中国被墙的厉害,http://209.116.186.231/ 这个地址能够訪问google.另外.有VPN或者某个奇妙的浏览器也能够. 非技术人员,还能够凑合着用百度,可是技术人员必须 ...
- Unity3d笔试题大全
1. [C#语言基础]请简述拆箱和装箱. 答: 装箱操作: 值类型隐式转换为object类型或由此值类型实现的任何接口类型的过程. 1.在堆中开辟内存空间. 2.将值类型的数据复制到堆中. ...
- Spine用于Timeline(NullReferenceException: Object reference not set to an instance of an object pine.Unity.Editor.AnimationReferenceAssetEditor.OnInspectorGUI ())
报错信息:Spine.Unity.Editor.AnimationReferenceAssetEditor.OnInspectorGUI () (at Assets/Extention/Spine/E ...
- Unity 4.0 中的新动画系统——MecAnim
分享一个文档资料,关于动画系统的,版本应该很老了,但是有借鉴意义的: Unity 4.0 已于 2012 年 11 月 15 日正式发布,Unity 每一次版本的提升,都给游戏开发者带来惊喜,这一次也 ...
随机推荐
- 字符型设备驱动程序-first-printf以及点亮LED灯(一)
学习使用 Linux 的 字符型设备驱动 来 进行 . 学习地址:http://edu.51cto.com/lesson/id-25710.html 第一步: 首先写 三个函数 ,2017年5月17 ...
- oracle入门(二)
### 一,视图 ```1. 什么是视图 视图是一张虚表, 可以把视图看成表使用(增删改查),视图中没有数据,所有的数据都在基本表中(tables) 封装了一个复杂的DQL 操作视图 ...
- 使用vue封装一个tab栏切换的左侧导航栏的公共组件
首先看最终效果图: 1.compent文件夹里添加tab文件夹,里面创建index.vue index.js index.css index.vue内的template部份代码如下:(最新更正:代码 ...
- ubuntu 如何进行文件、夹删除等操作
rm [选项] 文件-f, --force 强力删除,不要求确认-i 每删除一个文件或进入一个子目录都要求确认-I 在删除超过三个文件或者递归删除前要求确认-r, -R 递归删除子目录-d, --di ...
- #leetcode刷题之路21-合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例:输入:1->2->4, 1->3->4输出:1->1->2-&g ...
- Ubuntu 16 Java Develop环境快速搭建
安装JDK 1. 更新apt-get: $ sudo apt-get update 2. 安装jdk: $ sudo apt-get install openjdk-8-jdk 部分eclipse现只 ...
- MongoDB数据库 : 管道,用户管理,副本集等
聚合(aggregate): db.集合.aggregate([{管道:{表达式}}]) db.集合.aggregate([ {管道1:{表达式1}}, {管道2:{表达式2}}, ... ...]) ...
- 01-Python简介
人生苦短,我用 Python —— Life is short, you need Python 目标 Python 的起源 Python 解释器 是用 C 语言实现的,并能够调用 C 语言的库文件. ...
- python教程(零)·前言
本教程是作者根据自己学习python的经验写下的,一来是想将经验分享给对python同样感兴趣的小白(大神请忽略),二来是想借此加深本人对python的理解,温故而知新. 学习基础 本教程面向的读者, ...
- 一个博客萌新的C语言之旅(持续更新中....)
先更新上一次留下的的C语言练习答案,如下: #include <stdio.h> double mj(double r) { return 3.14*r*r; } int main() { ...