好久没写了,过来写一下,本文章针对代码(示例Lua)控制Spine(一种2D美术资源),这里主要针对SkeletonAnimation形式,说明方式使用代码注释记录。
代码每块全博客衔接
1.spine当前播放的动画名称
--获取SkeletonAnimation组件
local skeleton = obj[Spine.Unity.SkeletonAnimation]
local skeletonName = skeleton.AnimationName
2.spine当前播放的动画时长
local time = skeleton.Skeleton.Data:FindAnimation(skeletonName).Duration
3.spine动画播放控制
--播放动画:trackIndex,要播放的动画名称,是否循环
skeleton.AnimationState:SetAnimation(0, aniName, isLoop)
4.spine资源切换皮肤
同一个spine资源,修改Initial Skin属性
--skinName:皮肤名称-string
skeleton.initialSkinName = skinName
skeleton:Initialize(true)
5.spine切换层级
--levelNum:层级数-int
skeleton.sortingOrder = levelNum
6.spine操作部件
local skeletionRenderSeparator = obj[Spine.Unity.SkeletonRenderSeparator]
--增加部件
--partsName:部件名称-string
skeletionRenderSeparator.SkeletonRenderer:FindAndApplySeparatorSlots(partsName, false, true)
--获取部件
--pareName:部件的编号
skeletionRenderSeparator.partsRenderers[partNum].MeshRenderer
7.拼接
通过spine本身的皮肤拼接形成新的皮肤
举例:通过原有的皮肤(”jump“, ”stand“)形成新的皮肤(”run")
--将新皮肤从原有的皮肤复制一份出来
local newSkin = skeletion.Data:FindSkin("jump")
local _skin = skeletion.Data:FindSkin(”stand“)
--将皮肤混合
newSkin:AddSkin(_skin)
--将新皮肤进行应用
skeletion:SetSkin(newSkin)
skeletion:SetSlotsToSetupPose()
8.倒放动画
--将当前spine播放动画的起始帧与结束帧同步
skeleton.AnimationState:GetCurrent(0).AnimationStart =
skeleton.AnimationState:GetCurrent(0).AnimationEnd
--播放速度反向
skeleton.timeScale = -1
--延时处理后恢复动画播放速度并执行回调
Timer.call(time, function ()
skeleton.timeScale = 1
--回调
fun()
end)