首页 > 其他分享 >spine共享骨骼

spine共享骨骼

时间:2023-11-28 16:34:24浏览次数:35  
标签:slots skeleton thisBone sharedBone spine 骨骼 共享 mainframeSkeletonAnimation

项目中遇到使用多个相同spine的问题:

我们需要获取骨骼位置的时候,要拿下面这个类的信息

 spine工具给的更新方案是:每个spine在Update中每帧更新,根据当前spine更新骨骼信息。

这样比较费,比如我们项目场景中有五个角色,每个角色有五个编制,那光友方单位就是25个spine,很难蚌。

优化方案:每个角色设置一个主体spine,主体spine在Update中更新数据,剩下的4个相同spine在获取骨骼接口的时候同步一下主体spine的位置就可以(反正都是相对坐标,都是一致的)。

public void CopyMainframeSkeletonData()
	{
         //主体spine
        if (mainframeSkeletonAnimation.skeleton == null) return;
        if (skeleton == mainframeSkeletonAnimation.skeleton) return;
        for (int i = 0, j = skeleton.bones.Count; i < j; i++)
        {
            Bone thisBone = skeleton.bones[i];
            Bone sharedBone = mainframeSkeletonAnimation.skeleton.bones[i];
            thisBone.x = sharedBone.x;
            thisBone.y = sharedBone.y;
            thisBone.rotation = sharedBone.rotation;
            thisBone.rotationIK = sharedBone.rotationIK;
            thisBone.scaleX = sharedBone.scaleX;
            thisBone.scaleY = sharedBone.scaleY;
            thisBone.flipX = sharedBone.flipX;
            thisBone.flipY = sharedBone.flipY;
            thisBone.m00 = sharedBone.m00;
            thisBone.m01 = sharedBone.m01;
            thisBone.m10 = sharedBone.m10;
            thisBone.m11 = sharedBone.m11;
            thisBone.worldX = sharedBone.worldX;
            thisBone.worldY = sharedBone.worldY;
            thisBone.worldRotation = sharedBone.worldRotation;
            thisBone.worldScaleX = sharedBone.worldScaleX;
            thisBone.worldScaleY = sharedBone.worldScaleY;
            thisBone.worldFlipX = sharedBone.worldFlipX;
            thisBone.worldFlipY = sharedBone.worldFlipY;
        }
        // 复制slot信息
        for (int i = 0, j = skeleton.slots.Count; i < j; i++)
        {
            Slot thisSlot = skeleton.slots[i];
            Slot sharedSlot = mainframeSkeletonAnimation.skeleton.slots[i];
            thisSlot.Attachment = sharedSlot.Attachment == null ? null : skeleton.GetAttachment(i, sharedSlot.Attachment.Name);
        }
        // 复制order信息
        if (mainframeSkeletonAnimation.skeleton.drawOrderToSetupIndex == null)
        {
            skeleton.drawOrder.Clear();
            skeleton.drawOrder.AddRange(skeleton.slots);
        }
        else
        {
            for (int k = 0, n = mainframeSkeletonAnimation.skeleton.drawOrderToSetupIndex.Length; k < n; k++)
                skeleton.drawOrder[k] = skeleton.slots[mainframeSkeletonAnimation.skeleton.drawOrderToSetupIndex[k]];
        }
    }

  在获取骨骼位置的时候调用一下这个函数刷新就可以了。

标签:slots,skeleton,thisBone,sharedBone,spine,骨骼,共享,mainframeSkeletonAnimation
From: https://www.cnblogs.com/mcyushao/p/17862271.html

相关文章

  • Ubuntu 安装nfs 实现共享目录
    多台服务器之间共享目录,实现每个服务器进入目录看到的内容都一样1、服务器A安装   nfs-kernel-server#aptinstallnfs-kernel-server2、服务器A,编辑配置文件:/etc/exports/共享的目录 服务器B的IP(rw,sync,no_subtree_check,no_root_squash) 例如:/da......
  • linux 文件共享盘以及备份机制
    NFS minio  glusterFile 1.NFSNFS服务器搭建  目录NFS服务器1、NFS简介2、NFS工作机制2.1.RPC3、/etc/exports文件的格式4、实操1)手动挂载2)自动挂载autofs NFS服务器1、NFS简介NFS(NetworkFileSystem)即网络文件系统,是FreeBSD支持的文件......
  • 华为云挂载云共享盘VDB
    先登录华为云后台,把共享盘挂载到需要挂载的服务器 进入服务器#显示所有块设备信息lsblk 挂载#如上图所示,/dev/vdb是要挂载的共享盘#创建要挂载的目录sudomkdir-p/data/test#挂载sudomount-text4/dev/vdb/data/test#df-h查看挂载df-hF......
  • std::future与std::promise在C++多线程同步与数据共享中的应用
    1、std::promise与std::futurestd::promise与std::future通过配合使用完成数据的同步与共享,两者均是模板类;std::promise存储异步执行的值或异常;std::future提供可供访问的异步执行结果。二者配合使用伪码如下:std::promise<Type>pr;std::future<Type>fu(pr.get_fu......
  • 共享内存的创建和映射过程
    消息队列、共享内存、信号量的机制:它们在使用之前都要生成key,然后通过key得到唯一的id,并且都是通过xxxget函数。在内核里面,这三种进程间通信机制是使用统一的机制管理起来的,都叫ipcxxx。为了维护这三种进程间通信进制,在内核里面,我们声明了一个有三项的数组。通过这段代码,来......
  • 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.11.26)
    一、百度网盘SVIP超级会员共享账号可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答。我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免了U盘的物理载体,直接在网上就实现文件传输。百度网盘SVIP会员可以让自己百度账......
  • ChatGPTGPT本地一键登录,无需魔法即开即用:PandoraNext重磅归来,支持chatgpt所有最新功
    PandoraNext简单介绍PandoraCloud+PandoraServer+SharedChat+BackendAPIProxy= PandoraNext支持GPTs,最新UI。支持多种登录方式:(相当于PandoraCloud)账号/密码AccessTokenSessionTokenRefreshTokenShareToken可内置tokens(可使用上述所有Token),支持设置密码。(相当于Pan......
  • 一个用于多线程共享数据保护测试的简易游戏服务器代码
    #include<iostream>#include<thread>#include<list>#include<mutex>//一个线程负责从客户端读取用户的命令,放入一个队列中;//另一个线程负责从队列中读取命令并解析,假设用一个int变量代表一个命令。classA{public://这里无法模拟从网络接受命令的过程,我们......
  • Windows共享文件夹
    正常共享流程报错解决方案添加完everyone用户即可进入共享盘......
  • Dart通过Ffi来实现字符串类型在Isolate里共享的方法
    其实就是将字符串转换为字节数组,然后用\0作为结尾表示字符串的结束;这样就可以定义一个字节数组作为字符串的容器(当然会有要求字符串不能超长,否则会截断,和C语言的字符串使用方式很像了)而且\0在java,js里打印都是会没有任何显示的(但是会占用字节),所以很适合当作字符串结尾来用(因为\0......