Unity之Spine笔记常用API

//skeletonData
 SkeletonAnimation skeletonAnimation = GetComponent<SkeletonAnimation>();
Debug.Log(skeletonAnimation.name);//获取角色名
Debug.Log(skeletonAnimation.skeleton.bones[5].ToString()); //获取所有骨骼数组list<spine.Bone>
Debug.Log(skeletonAnimation.skeleton.slots[5].ToString());//获取所有插槽数组
Debug.Log(skeletonAnimation.skeleton.data.animations[0].name.ToString());//获取所有动画数组
skeletonAnimation.skeleton.FindBone("root").flipX = true;//根据骨骼名获取骨骼
Debug.Log(skeletonAnimation.skeleton.FindBoneIndex("root").ToString());//根据骨骼名获取骨骼的index
Debug.Log(skeletonAnimation.skeleton.FindSlot("torso").attachment.Name);//根据slot名获取slot
Debug.Log(skeletonAnimation.skeleton.FindSlotIndex("torso").ToString());//根据slot名获取slot index
Debug.Log(skeletonAnimation.skeleton.data.FindAnimation("walk").name);//根据动画名获取动画 

//skin
Debug.Log(skeletonAnimation.skeleton.data.skins[0].name.ToString());//获取所有 skin
Spine.Attachment _attachment = skeletonAnimation.skeleton.data.skins[0].GetAttachment(5,"left lower leg");//从skin通过slot的index attachment的名获取attachment

//BoneData
Spine.Bone _bone = skeletonAnimation.skeleton.FindBone("left upper leg");
Debug.Log(_bone.parent.ToString());//获取骨骼的父骨骼
Debug.Log(_bone.data.length.ToString());//获取骨骼长度
Debug.Log(_bone.rotation.ToString());//获取骨骼旋转
Debug.Log(_bone.data.scaleX.ToString());//获取骨骼放缩
Debug.Log(_bone.data.scaleY.ToString());
Debug.Log(_bone.data.inheritRotation.ToString());// 是否旋转值相对父骨骼 true是相对父骨骼
Debug.Log(_bone.data.inheritScale.ToString());//是否放缩值相对父骨骼 true是相对父骨骼

 

//SlotData
Spine.Slot _slot =  skeletonAnimation.skeleton.FindSlot("torso");
Debug.Log(_slot.data.name);//获取slot的名字
Debug.Log(_slot.data.boneData.name);//获取slot挂靠的bone
Debug.Log(_slot.r.ToString());//获取slot的颜色R值
Debug.Log(_slot.data.attachmentName);//获取pose下slot的attachment名
_slot.data.additiveBlending = true;//获取或设置slot时候用additive blending来渲染  注释:用于特效?

 

//Animation
Debug.Log(skeletonAnimation.skeleton.data.animations[0].duration.ToString());//动画持续时间?
List<Spine.Timeline> _timeline =  skeletonAnimation.skeleton.data.animations[0].timelines;//获取动画timeline

 

//Skeleton
Spine.SkeletonData _data = skeletonAnimation.skeleton.data;//获取SkeletonData
Debug.Log(_data.bones[0].ToString()); //获取所有骨骼
Debug.Log(_data.slots[0].ToString());//获取所有slots
Debug.Log(skeletonAnimation.skeleton.drawOrder[0].attachment.Name);//获取所有DrawOder
Debug.Log(skeletonAnimation.skeleton.skin.name);//获取当前skin名
skeletonAnimation.skeleton.r = 0.5f;//对skin的整体偏色 有rgba四个参数
Debug.Log(skeletonAnimation.skeleton.time.ToString());//?
skeletonAnimation.skeleton.flipX = true;//skeleton翻转轴向
skeletonAnimation.skeleton.flipY = true;
skeletonAnimation.skeleton.x = 0;//skeleton的坐标
skeletonAnimation.skeleton.y = 0;
skeletonAnimation.skeleton.SetBonesToSetupPose();
skeletonAnimation.skeleton.SetSlotsToSetupPose();
skeletonAnimation.skeleton.SetToSetupPose();

//skeletonAnimation.skeleton.GetAttachment();//获取GetAttachment
//skeletonAnimation.skeleton.SetAttachment();
skeletonAnimation.skeleton.Update(0.5f);//??

 

--换装函数,但是必须在slot里有这个attachMent名

skeletonAnimation = GetComponent<SkeletonAnimation>(); skeletonAnimation.skeleton.SetAttachment("rear_upper_arm","muzzle"); skeletonAnimation.skeleton.GetAttachment();

 

--动画翻转

if(x > 0) skeletonAnimation.skeleton.FlipX = false;

else if(x < 0) skeletonAnimation.skeleton.FlipX = true;

 

--播放动画

skeletonAnimation.state.SetAnimation(0, hitAnimation, false); skeletonAnimation.state.AddAnimation(0, currentAnimation, true, 0);

注:(起始帧,动画名,是否loop)

 

//角色之间的绘制排序

renderer.sortingOrder = -5;

 

转载于:https://www.cnblogs.com/weiqiangwaideshijie/p/6897482.html

Unity 中使用 Spine 动画时,若希望通过 API 停止动画播放,可以通过操作 `AnimationState` 来实现。Spine 的 `AnimationState` 提供了多种方法来控制动画的播放状态,包括停止当前动画。 要停止动画播放,可以使用以下方式之一: - **设置空动画**:通过调用 `SetAnimation` 方法并传入一个不存在的动画名称(或 null),可清除当前层级上的动画。需要注意的是,如果希望完全停止动画而不播放任何内容,可以在资源中准备一个空白动画并在代码中引用它[^2]。 示例代码如下: ```csharp skeleton.AnimationState.SetAnimation(0, "empty", false); // 假设"empty"是一个空白动画 ``` - **清除所有动画队列**:通过调用 `ClearTracks` 方法可以清除所有轨道上的动画,从而停止所有正在播放或排队的动画[^2]。 示例代码如下: ```csharp skeleton.AnimationState.ClearTracks(); ``` - **暂停动画更新**:另一种方式是直接禁用 `SkeletonAnimation` 组件的更新逻辑,这不会立即停止动画,但会阻止其继续更新[^3]。 示例代码如下: ```csharp skeleton.enabled = false; ``` 以上方法可以根据具体需求选择使用。例如,如果只是想暂时停止动画,推荐使用 `ClearTracks`;如果需要永久停止且不保留任何动画状态,则可以结合 `SetAnimation` 和一个空白动画资源[^1]。 ### 注意事项 - 在使用上述 API 时,请确保已经正确导入命名空间 `Spine.Unity`,否则将无法访问相关类和方法。 - 如果动画被绑定到 Unity 的 Animator 系统中,则需通过 Animator 控制动画状态,而不是直接使用 Spine API。 ### 示例代码整合 以下是一个完整的示例脚本,展示如何通过按钮点击停止 Spine 动画: ```csharp using UnityEngine; using Spine.Unity; public class StopSpineAnimation : MonoBehaviour { public SkeletonAnimation skeleton; void Start() { skeleton = GetComponent<SkeletonAnimation>(); } public void StopAnimation() { // 清除所有轨道上的动画 skeleton.AnimationState.ClearTracks(); // 或者设置为空白动画 // skeleton.AnimationState.SetAnimation(0, "empty", false); } } ``` 将该脚本附加到包含 Spine 动画组件的游戏对象上,并通过 UI 按钮或其他逻辑触发 `StopAnimation` 方法即可实现动画停止。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值