Unity_用脚本控制Spine动画播放和切换皮肤

Spine在Unity里使用有3钟方式:

  1. SkeletonAnimation,Spine原生方式,支持所有Spine功能

  2. SkeletonMecanim (或 SkeletonAnimator),会将SkeletonData中的动画转换为一系列AnimationClips ,并生成一个Unity Animator Controller动画状态机

  3. Baking,不推荐,是专门为没有spine runtime准备的,无法使用Spine特有的功能


之前播放Spine动画用的是SkeletonMecanim方式,发现测试用的动画资源还有皮肤,可查了半天没有找到SkeletonMecanim方式下用脚本切换皮肤的方法

找到的切换皮肤的方法都是用SkeletonAnimation方式的,就也研究了下用这种方式控制动画播放和切换皮肤


一样是直接把SkeletonData文件拖进层级窗口,不过这次选SkeletonAnimation

选择待机动画,设置循环播放,就可以运行看效果了

但这样仅仅只是播放一个动画,新建一个脚本控制点击播放其他动画和更换皮肤

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

using Spine;
using Spine.Unity;

public class NewBehaviourScript1 : MonoBehaviour
{
    bool Touch = false;//用来控制动画播放过程中不能被重复开始播放
    bool cloth = false;//是否切换皮肤
    public SkeletonAnimation skeletonanimation;

    void Start()//游戏开始时执行一次
    {
        skeletonanimation=GetComponent<SkeletonAnimation>();//获取骨骼动画组件
        
        skeletonanimation.AnimationState.Complete += completeEvent;//注册动画回调事件函数

        skeletonanimation.AnimationState.SetAnimation(0, "XXX_idle1", true);//循环播放待机动画
    }

    void Update()//每帧执行
    {
        if (Input.GetMouseButtonDown(0)&& Touch==false) //左键
        {
            Touch = true;
            print("点击屏幕");
            skeletonanimation.AnimationState.SetAnimation(0, "XXX_angry", false);//播放点击动画
        }
        if (Input.GetMouseButtonDown(1)) //右键
        {
            if(cloth)
            {
                cloth = false;
                print("默认皮肤");
                skeletonanimation.initialSkinName = "1";
                skeletonanimation.Initialize(true); //重新初始化
                skeletonanimation.AnimationState.Complete += completeEvent;//重新初始化后也需要重新注册动画回调事件函数
                skeletonanimation.AnimationState.SetAnimation(0, "a_01_idle1", true);
                Touch = false;
            }
            else
            {
                cloth = true;
                print("切换皮肤");
                skeletonanimation.initialSkinName = "8";
                skeletonanimation.Initialize(true); //重新初始化
                skeletonanimation.AnimationState.Complete += completeEvent;//重新初始化后也需要重新注册动画回调事件函数
                skeletonanimation.AnimationState.SetAnimation(0, "a_01_idle1", true);
                Touch = false;
            }
        }
    }

    /*定义动画回调事件函数*/
    public void completeEvent(Spine.TrackEntry trackEntry)
    {
        if(Touch)
        {
            Touch = false;
            //点击动画播放完成后切换回待机动画
            skeletonanimation.AnimationState.SetAnimation(0, "a_01_idle1", true);
        }
    }
}

直接挂载上去

运行,点击对应按键测试


参考:unity spine动画使用记录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值