47.2D动画Spine骨骼动画代码控制

47.2D动画-2D骨骼动画-Spine-骨骼动画代码相关


47.1 知识点

预操作

创建脚本挂载到spine对象上,声明一个SkeletonAnimation变量开始的时候得到spine自带的

skeletonAnimation = this.GetComponent<SkeletonAnimation>();

动画播放

SkeletonAnimation.AnimationName变量 设置动画名

SkeletonAnimation.loop变量 设置动画是否循环

//方法一:直接改变SkeletonAnimation中参数

//注意 要先设置循环为false再设置动画 最后在根据播的动画要不要循环进行设置
skeletonAnimation.loop = false;
skeletonAnimation.AnimationName = "jump";
//skeletonAnimation.loop = true;

SkeletonAnimation.AnimationState.SetAnimation方法 设置动画立即播放

SkeletonAnimation.AnimationState.AddAnimation方法 设置动画排队播放

//方法二:使用SkeletonAnimation中动画状态改变的函数

//马上播放 立即切换 传入 0 动画字符串 是否循环 
skeletonAnimation.AnimationState.SetAnimation(0, "jump", false);
skeletonAnimation.AnimationState.SetAnimation(0, jumpName, false);
//排队播放 等待上个动画播完切换 传入 0 动画字符串 是否循环 延迟时间
skeletonAnimation.AnimationState.AddAnimation(0, "walk", true, 0);

转向

SkeletonAnimation.skeleton.ScaleX变量 x的翻转

// 翻转spine对象
skeletonAnimation.skeleton.ScaleX = -1;

动画事件

SkeletonAnimation.AnimationState.Start事件 动画开始播放时的事件

//动画开始播放事件
skeletonAnimation.AnimationState.Start += (t) =>
{
    print( skeletonAnimation.AnimationName +  "动画开始播放");
};

SkeletonAnimation.AnimationState.End事件 动画中断或者清除时的事件

//动画被中断或者清除事件
skeletonAnimation.AnimationState.End += (t) =>
{
    print(skeletonAnimation.AnimationName + "动画中断或者清除");
};

SkeletonAnimation.AnimationState.Complete事件 动画播放完成时的事件

//播放完成事件
skeletonAnimation.AnimationState.Complete += (t) =>
{
    print(skeletonAnimation.AnimationName + "动画播放完成");
};

SkeletonAnimation.AnimationState.Event事件 自定义事件

//做动画时添加的自定义事件事件 这里的事件是美术在spine软件做动画的时候假如添加了的话才会调用的
skeletonAnimation.AnimationState.Event += (t, e) =>
{
    print(skeletonAnimation.AnimationName + "自定义事件");
};

便捷特性

动画特性

[SpineAnimation]
public string jumpName;
// 动画特性
// 添加了这个特性之后外部可以下拉框选择动画 设置变量为动画名字 切换动画直接拿变量的值就行 就不用自己看动画什么名字了
skeletonAnimation.AnimationState.SetAnimation(0, jumpName, false);

骨骼特性

[SpineBone]
public string boneName;
// 快捷得到骨骼的名字 就不用在其他组件或者Debug窗口里找了

插槽特性

[SpineSlot]
public string slotName;
// 快捷得到插槽名

附件特性

[SpineAttachment]
public string attachmentName;
// 快捷得到附件名

获取骨骼、设置插槽附件

SkeletonAnimation.skeleton.FindBone方法 获取骨骼

// 获取骨骼
Bone b = skeletonAnimation.skeleton.FindBone(boneName);

SkeletonAnimation.skeleton.SetAttachment方法 设置插槽附件

// 设置插槽附件 传入插槽名和附件名
skeletonAnimation.skeleton.SetAttachment(slotName, attachmentName);

在UI中使用

  • 把Data文件拖进来选择SkeletonGraphic(UnityUI),放到Canvas下,调整位置


47.2 知识点代码

using Spine;
using Spine.Unity;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//挂载到spine对象
public class Lesson47_2D动画_2D骨骼动画_Spine_骨骼动画代码相关 : MonoBehaviour
{
    private SkeletonAnimation skeletonAnimation;

    [SpineAnimation]
    public string jumpName;

    [SpineBone]
    public string boneName;

    [SpineSlot]
    public string slotName;

    [SpineAttachment]
    public string attachmentName;

    void Start()
    {
        //得到spine对象挂载的SkeletonAnimation脚本
        skeletonAnimation = this.GetComponent<SkeletonAnimation>();

        #region 知识点一 动画播放

        //方法一:直接改变SkeletonAnimation中参数

        //注意 要先设置循环为false再设置动画 最后在根据播的动画要不要循环进行设置
        skeletonAnimation.loop = false;
        skeletonAnimation.AnimationName = "jump";
        //skeletonAnimation.loop = true;

        //方法二:使用SkeletonAnimation中动画状态改变的函数

        //马上播放 立即切换 传入 0 动画字符串 是否循环 
        skeletonAnimation.AnimationState.SetAnimation(0, "jump", false);
        skeletonAnimation.AnimationState.SetAnimation(0, jumpName, false);
        //排队播放 等待上个动画播完切换 传入 0 动画字符串 是否循环 延迟时间
        skeletonAnimation.AnimationState.AddAnimation(0, "walk", true, 0);

        #endregion

        #region 知识点二 转向
        //翻转spine对象
        skeletonAnimation.skeleton.ScaleX = -1;
        #endregion

        #region 知识点三 动画事件

        //动画开始播放事件
        skeletonAnimation.AnimationState.Start += (t) =>
        {
            print( skeletonAnimation.AnimationName +  "动画开始播放");
        };
        //动画被中断或者清除事件
        skeletonAnimation.AnimationState.End += (t) =>
        {
            print(skeletonAnimation.AnimationName + "动画中断或者清除");
        };
        //播放完成事件
        skeletonAnimation.AnimationState.Complete += (t) =>
        {
            print(skeletonAnimation.AnimationName + "动画播放完成");
        };
        //做动画时添加的自定义事件事件 这里的事件是美术在spine软件做动画的时候假如添加了的话才会调用的
        skeletonAnimation.AnimationState.Event += (t, e) =>
        {
            print(skeletonAnimation.AnimationName + "自定义事件");
        };

        #endregion

        #region 知识点四 便捷特性

        // 动画特性
        //[SpineAnimation]
        //添加了这个特性之后外部可以下拉框选择动画 设置变量为动画名字 切换动画直接拿变量的值就行 就不用自己看动画什么名字了
        skeletonAnimation.AnimationState.SetAnimation(0, jumpName, false);


        // 骨骼特性
        //[SpineBone]
        //快捷得到骨骼的名字 就不用在其他组件或者Debug窗口里找了

        // 插槽特性
        //[SpineSlot]
        //快捷得到插槽名

        // 附件特性
        //[SpineAttachment]
        //快捷得到附件名

        #endregion

        #region 知识点五 获取骨骼、设置插槽附件

        //获取骨骼
        Bone b = skeletonAnimation.skeleton.FindBone(boneName);

        //设置插槽附件 传入插槽名和附件名
        skeletonAnimation.skeleton.SetAttachment(slotName, attachmentName);

        #endregion

        #region 知识点六 在UI中使用
        //把Data文件拖进来选择SkeletonGraphic(UnityUI),放到Canvas下,调整位置
        #endregion
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏