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