打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Unity Spine动画常用API_skeletonanimation
 TrackEntryDelegate cc;
        /// <summary>
        /// 动画执行完毕回调
        /// </summary>
        /// <param name="anim">spine动画</param>
        /// <param name="name">动作名称</param>
        /// <param name="isLoop">是否循环</param>
        /// <param name="action">回调</param>
        public void PlaySpineAddEvent(SkeletonGraphic anim, string name, bool isLoop = false, System.Action action = null)
        {
            anim.AnimationState.ClearTracks();
            anim.AnimationState.SetAnimation(0, name, isLoop);

            cc = delegate
            {
                action();
                anim.AnimationState.Complete -= cc;
            };

            anim.AnimationState.Complete += cc;

        }
   /// <summary>
        /// 替换spine动画
        /// </summary>
        /// <param name="Skeleton">SkeletonData存放路径</param>
        /// <param name="ChangeSkeleton">spine载体</param>
        public void ReplaceSpine(string Skeleton, GameObject ChangeSkeleton)
        {
            ChangeSkeleton.GetComponent<SkeletonGraphic>().skeletonDataAsset = Resources.Load<SkeletonDataAsset>(Skeleton);
            ChangeSkeleton.GetComponent<SkeletonGraphic>().Initialize(true);
        }

SkeletonAnimation.AnimationState.GetCurrent(0);//获取当前播放轨道第一个动画的名称
SkeletonAnimation.AnimationState.GetCurrent(0).AnimationTime;//获取当前播放轨道第一个动画的时长
SkeletonAnimation skeletonAnimation = GetComponent();
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.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;

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
log4j 学习笔记
【新提醒】【behave行为树学习使用第三天】
别在 Java 代码里乱打日志了,这才是正确的打日志姿势!
Java 调整格式日志输出
ibatis在debug时打印完整的SQL语句
CAS3.0 定制验证
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服