前言

最近这两天刚刚接触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的更多相关文章

  1. Spine学习七 - spine动画资源+ Unity Mecanim动画系统

    前面已经讲过 Spine自己动画状态机的动画融合,但是万一有哥们就是想要使用Unity的动画系统,那有没有办法呢?答案是肯定的,接下来,就说说如何实现: 1. 在project面板找打你导入的Spin ...

  2. Unity Mecanim在大型mmo中的应用

    http://blog.csdn.net/langresser_king/article/details/37760091?utm_source=tuicool&utm_medium=refe ...

  3. Unity Mecanim 动画系统

    1. Animator 组件 Controller:使用的Animator Controller文件. Avatar:使用的骨骼文件. Apply Root Motion:绑定该组件的GameObje ...

  4. Unity动态换装之Spine换装

    注:转载请注明转载,并附原链接 http://www.cnblogs.com/liaoguipeng/p/5867510.html 燕双飞情侣 一.动态换装原理 换装,无非就是对模型的网格,或者贴图进 ...

  5. 台北Unity开发者研讨会 笔记

    本文转自:http://ndark.wordpress.com/2013/05/12/20130511-台北unity开发者研讨会-笔记/ (墙外) 说明 本文单纯只是笔记,若有笔误敬请见谅. 相关参 ...

  6. 你跟大牛之间仅仅差一个google

    google在中国被墙的厉害,http://209.116.186.231/ 这个地址能够訪问google.另外.有VPN或者某个奇妙的浏览器也能够. 非技术人员,还能够凑合着用百度,可是技术人员必须 ...

  7. Unity3d笔试题大全

    1.       [C#语言基础]请简述拆箱和装箱. 答: 装箱操作: 值类型隐式转换为object类型或由此值类型实现的任何接口类型的过程. 1.在堆中开辟内存空间. 2.将值类型的数据复制到堆中. ...

  8. 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 ...

  9. Unity 4.0 中的新动画系统——MecAnim

    分享一个文档资料,关于动画系统的,版本应该很老了,但是有借鉴意义的: Unity 4.0 已于 2012 年 11 月 15 日正式发布,Unity 每一次版本的提升,都给游戏开发者带来惊喜,这一次也 ...

随机推荐

  1. Spring中使用属性文件properties的两种方式

    实际项目中,通常将可配置的参数放到属性文件中,例如数据库连接信息.redis连接信息等,便于统一管理.然后通过IoC框架spring将其加载到上下文中,使得程序可以直接使用. 创建mysql.prop ...

  2. VPP(Vector Packet Processing)配置工具

    前言 VPP提供了一个配置工具,让用户可以简单快捷地配置VPP.用户可以通过一些简单的命令配置VPP,功能包括安装及一些基本配置和测试用例. 使用 先安装一个python的pip模块,使用pip安装V ...

  3. 前端基础-HTML的的标签详解

    阅读目录 一.head内常用标签 二. HTML语义化 三. 字符实体 四. h系列标签 五. p标签 六. img标签 七. a标签 八. 列表标签 九. table标签 十. form标签 一. ...

  4. 苹果IPad客户端安装测试软件

    背景: 公司在开发一个App应用,需要部署在苹果IPad上进行测试,但是我负责后端开发对安装及测试相关流程不了解.经过一番学习得出以下结论: 1. 首先申请一个苹果的开发账号(一千块左右),大约能注册 ...

  5. OC字符串处理

    接到一个需求, 现有多个品牌的商品,使用字符串保存已选中的品牌,使用','隔开,可以反选. 分析问题可知: 1. 字符串由多个品牌名字组成,由 ',' 隔开. 2.如果选中的品牌不在字符串内,则拼接到 ...

  6. MySQL+MyCat分库分表 读写分离配置

    一. MySQL+MyCat分库分表 1 MyCat简介 java编写的数据库中间件 Mycat运行环境需要JDK. Mycat是中间件.运行在代码应用和MySQL数据库之间的应用. 前身 : cor ...

  7. Linux网卡配置文件 参数详解

    之所以弄这玩意儿是图个清晰方便,最近这段时间弄了好十来次虚拟机网络了ubuntu,centos,rhat7各种折腾,其实把网上各种命令行下的攻略折腾最后关键无非都是对/etc/sysconfig/ne ...

  8. [上架] iOS 上架更新版本号建议

    iOS 上架一個新版本号,就改个版号数字就好,有什么好说的? 是啊~ 如果上架顺利的话,就没什么好说的,如果被退件,再上传更新时,那版号怎么改? 下面说说我的做法(这只是建议,版号随自己喜好,没有固定 ...

  9. 阻止Quartus优化掉信号

    使用SignalTap II Logic Analyzer观察信号,有时要观察的信号会被Quartus优化掉,这种情况下可以给信号指定属性.以下例子均使用Verilog. 1. 如果是组合逻辑信号,可 ...

  10. Git 创建并管理局域网仓库

    Git 作为当前比较流行的代码管理工具,可以实现多人协作,不同版本代码管理. 本文内容基于Ubuntu. 0. 配置git信息 git config --global user.name XXX # ...