美文网首页Spine技巧大全
spine-unity整体结构

spine-unity整体结构

作者: _小圆球_ | 来源:发表于2020-07-28 14:09 被阅读0次

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

    • spine-csharp
    • spine-unity
    • ... 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可以创建一个骨架)。通常,你不应该去改动这些无状态的对象。

    • 如果想得到有状态的对象,你可以使用Skeleton。(比如:设置骨架的姿势或者替换一个槽的附件)
    • 如果想得到无状态的对象,你可以使用SkeletonData。(比如:想要获得一些信息,例如Animation的持续性、Event、或者Setup/Bind姿势)

    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组件

    相关文章

      网友评论

        本文标题:spine-unity整体结构

        本文链接:https://www.haomeiwen.com/subject/zwzxrktx.html