解决Spine骨骼混合动画错乱问题

  Spine是一个很好的制作2D骨骼动画的软件,其中提供的混合(mix)动画功能可以很柔和过度两个不同的动画,但在混合时期,稍有不善,非常容易出现各种错乱。在Spine2D骨骼动画群上,有人提出全K帧、K透明轴等等方法,这些方法往往只是恰好解决了一些问题,但还有相当一部分潜在的问题还是可能发生的。

  在使用过程中,我发现Spine的错乱问题主要表现在以下两个方面:

  1. Slot位置下,A动画中有abcd四个时间轴,而B动画只有abc三个时间轴,那么从A切换到B时,切换时d轴的状态(纹理或色彩)可能会残留到B动画上(如A是攻击动画,B是行走动画,d是特效轴)。

  2. Slot位置下,A动画与B动画混合时期(●表示关键帧):

    A:●---------------------------●------

    B:                              ●-------------------------------

                 |混合时期|

    在这种状态下,由于B动画设置了纹理之后,A动画又设置了纹理,混合时间之后,Slot位置下的纹理是A动画的纹理,这时候纹理错乱了,这种不能通过K帧解决,因为需要注意的问题太多了。

  如果以上两个问题都解决了,那么混合动画基本就没有什么问题了(目前我项目中还没有发现其它问题)。

  对于问题1,原则上,A动画有的轴,B动画也必须中,如果B动画中没有,则自动为B动画以setup pose状态为基准生成这条轴(纹理、变换、色彩等)。补齐及二制作转换脚本请见github

  对于问题2,修改spine-runtime中的Animation.c文件中函数_spAttachmentTimeline_apply中的代码:将"if (self->frames[frameIndex] < lastTime) return;"改为"if (self->frames[frameIndex] < lastTime && 1 - alpha <= FLT_EPSILON) return;", 并且在文件开始部分添加"#include <float.h>"。alpha(0~1)参数表示是混合进度,原理很简单,在混合时期一直让新的动画轴去设置纹理。

时间: 2024-11-05 14:24:44

解决Spine骨骼混合动画错乱问题的相关文章

使用spine骨骼动画制作的libgdx游戏

(官网:www.libgdx.cn) Super Spineboy是一个使用Spine和libgdx开发的跨平台游戏(Windows,Mac,Linux),Spine是一个2D游戏动画工具.Super Spineboy是使用Spine骨骼动画的游戏. 下载 Super Spineboy 可以运行在Windows,Mac或者Linux.JDK最低版本为JDK 6.下载地址如下: 点击下载 运行Super Spineboy,双击运行superSpineboy.jar,或者从命令行下载: java -

在libGDX中使用Spine骨骼动画

首先,github是个宝库,实践流的读者可以直接看例子进行学习 1.这是Spine官方给出的例子 https://github.com/EsotericSoftware/spine-superspineboy 2.我推荐这个,很棒的例子及使用合集 https://github.com/EsotericSoftware/spine-runtimes/tree/master/spine-libgdx 下面,我详细说明一下使用步骤: 首先是读取纹理地图集和骨骼数据,这些骨骼数据也包含动画状态数据. T

记录 Spine骨骼动画导入unity 步骤[unity3d 4.6.6版本 2d动画]

1:准备好unity使用Spine所需要的运行库,可到如下地址 https://github.com/EsotericSoftware/spine-runtimes/tree/master/spine-unity 使用git下载,或直接下载master.zip文件. 2:准备好Spine导出好的动画文件,正好最近偶尔玩一个游戏,里面使用了Spine制作的骨骼动画,我就直接使用它做好的资源记录一下步骤,仅作笔记使用.    我这里的动画文件资源如图: 这里需要提前做一个准备工作,把上图中的enem

程序员初见Maya 之 简单骨骼蒙皮动画

作为一个Unity3d程序员,和3D动画打交道的时间占了工作的大半.每天从美术手里接过热乎乎的FBX,导入到Unity3d,对其进行一番Clip切割,修改一下Scale比例,然后到代码中修改一下状态机,调试每一个动作. 但是终究是用别人的成品. FBX导入到编辑器中,看到有Root.LeftBone.Bone123456这些节点,不知道是什么东西. 这种很迷糊的感觉. 趁清明回家,花一天熟悉Maya的基础知识,做一个最简单的骨骼蒙皮动画. 开发工具: Maya2015 Unity3d 安装May

骨骼蒙皮动画中的坐标变换

背景知识 模型视图变换 OpenGL没有视图矩阵,只有模型视图矩阵,一般游戏引擎都会抽象出视图矩阵的. 总的变换为: v` = projection * view * mode * v; 父子节点变换 v` = worldMatrix * v = (parentWorldMatrix * localMatrix) * v; 骨骼变换 其实真正表示的关节,而不是骨头,只是骨头比较好理解. 默认姿态网格对象坐标空空变换到骨骼局部坐标空间(offsetMatrix). 完了后又从骨骼空间变换回动画姿态

android混合动画实现

在android开发,我们会常常使用到动画,可是简单的一种动画(如旋转.缩放.渐变.位移等)有时候并不能满足我们项目的要求,这时候就须要运用到混合动画.那么在安卓中是怎样实现一个炫酷的混合动画,以下是一个混合动画实现的当中一个实现方式: 1.首先要在res文件夹下建立一个anim文件.在anim建立一个hybrid.xml文件例如以下: <? xml version="1.0" encoding="utf-8"?> <set xmlns:andro

[UE4]混合动画以及Try Get Pawn Owner、Get Velocity、VectorLength的使用

混合动画,可以混合个多动画之间的动画,多个动画相当于关键帧,关键帧之间可以生成混合出过度动画. 实时动态更新Speed参数. 知识点: 一.可以在蓝图中使用“Try Get Pawn Owner”取得角色控制者 二.使用“Get Velocity”可以取得Pawn的移动速度 三.使用“VectorLength”可以取得Vector向量的长度.(向量Vector是有长度有方向的量) 原文地址:https://www.cnblogs.com/timy/p/8978082.html

3dmax教程 人物+骨骼+蒙皮+动画教程

人物+骨骼+蒙皮+动画完整教程 选准备好一个人,做人的方法我在这里就不做了,大家可以学都用poser来做一个. 在大腿里建立4根骨骼! 在前视图中移动如图所示位置! 做一段简单的骨骼向前伸的动画,做40帧就够了! 选中人皮,在修改器里加入skin命令! 加入骨骼 选中第一根骨骼,进入编辑状态! 通过数值调整第一根骨骼上下两个地方的封套!一直调到将大腿皮肤色变成红色为止!如图: 第二根骨骼也是如此 第三根 第4根 让我们先来看看效果! 大腿部有明显的折皱感!还不尽人意! 选择第一根骨骼,进入编辑状

[原]quick2.25添加spine骨骼动画

被美术妹子的狂喷之后,此文诞生!本来打算做科目一试题的,结果闹了这个了,祈祷苍天让我过吧! spine源码下载: http://pan.baidu.com/s/1qWuoSri 密码: 7ves 播放效果: 1.去下载spine的runtime库 地址:https://github.com/EsotericSoftware/spine-runtimes 文件结构 二.把spine-c下的include和src 统一整理到spine文件夹,将spine-cocos2d-x/2/src/spine下