Spine(Unity)

Spine动画  skeletonAnimation.state 

1.当前动画播放完毕后自动播放下一个动画

SkeletonGraphic spine_ = new SkeletonGraphic();
spine_.AnimationState.SetAnimation(0, "start", false);
spine_.AnimationState.AddAnimation(0, "idle", true, 0);
		public static void PlaySpine(GameObject obj, string name, Action callback = null) {
			var ske = obj.GetComponent<Spine.Unity.SkeletonGraphic>();
			if (ske == null) {
				return;
			}

			var state = ske.AnimationState;
			state.SetAnimation(0, name, false);

			if (callback != null) {
				Spine.AnimationState.TrackEntryDelegate onComplete = null;
				onComplete = delegate {
					state.Complete -= onComplete;
					callback();
				};
				state.Complete += onComplete;
			}
		}

		public static void PlaySpine(GameObject obj, string name, bool loop) {
			var ske = obj.GetComponent<Spine.Unity.SkeletonGraphic>();
			if (ske == null) {
				return;
			}

			var state = ske.AnimationState;
			state.SetAnimation(0, name, loop);
		}

		public static void SpineEvent(GameObject obj, Action<Event> callback = null) {
			var ske = obj.GetComponent<Spine.Unity.SkeletonGraphic>();
			if (ske == null) {
				return;
			}

			if (callback == null) {
				return;
			}

			Spine.AnimationState.TrackEntryEventDelegate onEvent = delegate (TrackEntry entry, Event e) { callback(e); };
			ske.AnimationState.Event += onEvent;
		}

2.自动动画补偿问题

1)由于spine在切换动画的时候自动补偿,用于动画的平稳过度。但是会导致残影等bug,这时候需要在SetAnimation前调用
skeletonAnimation.skeleton.SetToSetupPose ();
spineAnimationState.ClearTracks ();    或 skeletonGraphic.AnimationState.ClearTracks();
来消除前一个动画的影响。

2)也可以执行重置spine

在播放下一个动画前调用:    skeletonGraphic.Initialize(true);

3.事件

skeletonAnimation.state.Start:开始播放
skeletonAnimation.state.End:动画被清除或者中断
skeletonAnimation.state.Interrupt:动画被打断
skeletonAnimation.state.Complete:播放结束
skeletonAnimation.state.Event:用户自定义事件

事件设置采用lambda表达式:

skeletonAnimation.state.Complete += (state, trackIndex,loopCount) => {
Debug.log("");
};

4.动态获取slot的坐标:
Vector3 pos = skeletonAnimation.skeleton.FindSlot("hat_1").Bone.GetWorldPosition(transform);

Spine之SkeletonGraphic与Button并存

重置动画:Initialize

Spine.Unity.SkeletonGraphic skeleton;
skeleton.Initialize(true);

Reference:

Unity Spine动画常用API_skeletonanimation_AT巡礼的博客-CSDN博客

Unity---Spine动画_unity spine-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值