Spine技巧大全

spine-unity整体结构

2020-07-28  本文已影响0人  _小圆球_

spine-unity的功能由以下几个组件组成:

spine-csharp

spine-csharpspine运行库使用C#接口的公共核心。
你可以在Spine编辑器中看到这个公共核心包含的类型和数据结构的代码,其中包括Skeleton, Bone, Slot, Skin, Attachment,Animation
它会将JSON(.json)二进制(在Unity中显示为.skel.bytes)的骨架数据反序列化然后写进SkeletonData对象模型中。
它包含了基本的AnimationState实现、Spine的基础、以及直接可以使用的动画控制。所有的类都是在Spine命名空间下。

有状态stateful vs 无状态 stateless

Spine的核心类(定义在spine-csharp中)主要分为stateful-instancestateless-data这两种:

类似SkeletonBoneSlotAnimationState这些类都是有状态的对象,对它们进行修改不会影响到其它实例。你可以翻转Skeleton、复位Bone、修改Slot或者改变AnimationState的时间轴,并且它只适用于单例。
类似SkeletonData, Animation, Attachment, BoneData, SlotData这些类都是无状态的对象,设计初衷就是让他们可以被所有Skeleton实例交叉访问(比如每个Spine GameObject可以创建一个骨架)。通常,你不应该去改动这些无状态的对象。

spine-unity大部分的周期管理方法都依靠spine-csharp遵循的UnityEngine的生命周期和游戏循环。 但是它也包含主要的渲染代码(在.LateUpdate中)将Spine骨架转化为可见网格。

spine-unity也在编辑器和运行时管理spine-csharp类的反序列化和实例化。

在编写脚本的时候,请注意:所有的spine-csharp都应该在Awake中实例化。这意味着不能随意控制脚本执行顺序,不然不能保证当Awake被调用时已经实例化骨架和动画状态。

你应该在Start之后访问(或缓存).state.skeleton引用

SkeletonAnimator允许用户使用Mecanim动画控制器控制动画。 SkeletonUtility允许Spine.BonesUnityEngine.Transform之间进行转换。 这可以让你控制UnityEngine.Transform驱动Bone,或者让GameObject随着Bone运动

控制动画

一般来说,Spine.AnimationState 管理时间轨道、更新骨架、队列、分层以及混合/交叉混合动画。
但是Spine.AnimationState是一个C#类。要在Unity使用它,有一个包含MonoBehaviourSpine.AnimationState对象叫做SkeletonAnimation。你可以在SkeletonAnimation里面找到一个叫做state的成员变量,它是Spine.AnimationState对象的引用。
SkeletonAnimation既管理更新时间,也生成Mesh对象,因为它是SkeletonRenderer的派生类。你可以把骨架数据资源实例化成Spine GameObject然后挂到GameObject上。你可以称SkeletonAnimationSpine组件

上一篇下一篇

猜你喜欢

热点阅读