美文网首页
FairyGUI插入Spine

FairyGUI插入Spine

作者: 不正经的搬砖工 | 来源:发表于2021-02-19 15:35 被阅读0次

最近FairyGui新添了对Spine动画功能的支持,然后项目中就想用Spine动画做一些表现。然后按照官方文档上介绍的步骤在Unity中添加对Spine的支持,搞了半天,项目中运行动态加载Spine,要么就是完全看不到,要么就是一个黑片。通过查看官方问答和询问其它人,也没找到解决方案。最终放弃直接使用FairyGUI的Loader3D加载Spine,改用FairyGui嵌套UGUI加载Spine。Spine对Unity原生的UGUI有更好的支持。操作步骤如下:

1、首先Spine官网下载Spine-unity包(我使用的是spine-unity-3.8),导入Unity;

2、添加做好的Spine动画资源到Unity中;

导入动画资源时要注意,美术给的资源包含三个文件,如图2-1所示,一个图片,一个图集文本文件,一个skel文件。导入Unity前需要将skel文件添加.bytes后缀,然后拖入Unity才能正常生成运行需要的文件。最终生成的文件如图2-2所示,会生成一个图集对应的asset,一个skeletondata对应的asset,一个材质。

图2-1 图2-2

3、首先在FairyGUI添加一个Graph组件,作为容器,添加UGUI的Canvas组件;

4、然后添加SkeletonGraphic组件,设置SkeletonGraphic组件使用材质为SkeletonGraphicDefault.material;

5、加载SkeletonDataAsset资源,设置SkeletonGraphic

代码如下:

public static void AddSpine(GGraph holder, string spineName, string aniName, float posX, float posY, float scale = 1)

        {

            SkeletonGraphic sg;

            GameObject ngo = new GameObject("Canvas");

            Canvas canvas = ngo.AddComponent<Canvas>();

            canvas.renderMode = RenderMode.WorldSpace;

            canvas.worldCamera = StageCamera.main;  //相机使用FairyGUI的StageCamera

            GoWrapper gw = new GoWrapper(canvas.gameObject);

            holder.SetNativeObject(gw);

           GameObject sgGo = new GameObject("SkeletonGraphic");

           sgGo.transform.parent = ngo.transform;

           sg = sgGo.AddComponent<SkeletonGraphic>();

           sg.gameObject.transform.localScale = Vector3.one;

           sg.gameObject.transform.localPosition = Vector3.zero;

           sg.raycastTarget = false;

           sg.material = Resources.Load<Material>("spine/materials/SkeletonGraphicDefault");

           sg.skeletonDataAsset = Resources.Load<SkeletonDataAsset>($"spine/{spineName}");  //加载skel资源

           /*执行以下两步保证资源替换后,能正确渲染

           sg.Initialize(true);

           sg.Rebuild(UnityEngine.UI.CanvasUpdate.PreRender);

          /*重新设置动画

           sg.Skeleton.SetToSetupPose();

           sg.AnimationState.ClearTracks();

           sg.AnimationState.SetAnimation(0, aniName, true);

           /*设置偏移和缩放

           holder.SetScale(scale, scale);

           holder.SetPosition(posX, posY, holder.position.z);

          holder.visible = true;           

        }

相关文章

  • FairyGUI插入Spine

    最近FairyGui新添了对Spine动画功能的支持,然后项目中就想用Spine动画做一些表现。然后按照官方文档上...

  • spine-unity整体结构

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

  • FairyGUI在Cocos2d-x下的多平台接入和lua绑定

    Cocos2d-x版本是3.16FairyGUI库来自https://github.com/fairygui/Fa...

  • Laya开发-FairyGui使用

    xzhuan原创稿件,转载请注明出处! FairyGui简介FairyGUI(下面简称FGUI)提供了一个强大的U...

  • FairyGUI与Unity交互示例

    适用人群:需要使用FairyGUI的Unity开发人员。本文内容:介绍FairyGUI和Unity如何合作项目。 ...

  • Laya FairyGui系列一 FairyGui接入

    一,什么是FairyGui FairyGUI(下面简称FGUI)提供了一个强大的UI编辑器,使用习惯与Adobe系...

  • 在Unity中使用spine动画

    spine 的运行库: https://github.com/EsotericSoftware/spine-run...

  • Unity —Spine动画

    Spine是什么? Spine 是一款针对游戏开发的 2D 骨骼动画编辑工具。 Spine 旨在提供更高效和简洁 ...

  • spine网页

    今天主要做了spine的研究 spine动画和live2d的区别 网页动画的原理和分类,为什么spine动画能够在...

  • FairyGUI

    1、导出\不导出 FairyGUI是以包为单位组织资源的。包在文件系统中体现为一个目录。assets目录下每个子目...

网友评论

      本文标题:FairyGUI插入Spine

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