当前位置: 首页 > article >正文

unity+ spine切换武器不换皮肤解决方案

1.在spine编辑中获取到角色武器插槽名称

这里的武器插槽名称为“zj_22”。角色的spine正常导出到unity中。 

2.将需要替换的武器图片单独放在一个spine项目里面,并为每个武器单独建立一个插槽。

而且全部放在根骨骼Root下。

3.将武器的spine动画导出,会得到三个文件,对于武器只需要将atlas.txt和png这两个文件放在unity工程中

4.导入unity工程后,找到.asset文件,也就是图集资源,这里替换的图片暂时用其他spine动画中的武器图片资源:WQ_LiHuoJian2,后面代码会用到。

5.通过代码动态控制

// 1. 从 Resources 文件夹中加载 Spine 图集资源(AtlasAsset)
var ass = Resources.Load<SpineAtlasAsset>("DaoShiRole/jueSe_daoShi01_Atlas");
if (ass == null)
{// 若加载失败,打印错误并中断执行(路径错误或资源未导入)Debug.LogError("AtlasAsset 加载失败,请检查路径是否为:Resources/DaoShiRole/jueSe_daoShi01_Atlas");return;
}// 2. 从 AtlasAsset 中获取原始 Spine Atlas 对象
var atlas = ass.GetAtlas();// 3. 查找图集中指定名称的 Region(纹理片段)
// "WQ_LiHuoJian2" 是你在 Spine 中的附件名称(attachment region 名)
var region = atlas.FindRegion("WQ_LiHuoJian2");
if (region == null)
{// 如果找不到对应图片区域,说明名字拼写有误或没导出Debug.LogError("Region 未找到,请检查名称是否正确(区分大小写)");return;
}// 4. 将找到的 Region 转换为 RegionAttachment(可挂载到骨骼的显示对象)
var attachment = region.ToRegionAttachment(region.name);
if (attachment == null)
{Debug.LogError("RegionAttachment 创建失败!");return;
}// 5. 设置附件的偏移位置与旋转角度(单位为像素和度数)
// 这些值会影响该图片在角色插槽上的位置和朝向
attachment.X += 0.2f;          // X方向偏移 0.2 单位
attachment.Y += 0.1f;          // Y方向偏移 0.1 单位
attachment.Rotation += 180.0f; // 顺时针旋转 180 度(比如剑翻转)// 6. 应用变换设置(更新内部渲染数据)
attachment.UpdateRegion();// 7. 获取角色上的 SkeletonAnimation(Spine 主控组件)
var skeletonAnim = m_Role.GetComponent<PlayerRender>().m_SkeletonAnimation;
if (skeletonAnim == null)
{Debug.LogError("角色上没有 SkeletonAnimation 组件!");return;
}// 8. 查找角色骨骼中的指定插槽(Slot)来放置附件
// "zj_22" 是你在 Spine 编辑器中定义的插槽名,必须拼写完全一致
var slot = skeletonAnim.skeleton.FindSlot("zj_22");
if (slot == null)
{Debug.LogError("找不到 zj_22 插槽!");return;
}// 9. 将我们创建的 RegionAttachment 设置到该插槽上
// 这会立即替换该 slot 当前显示内容为我们动态加载的图片
slot.Attachment = attachment;

这样就能实现不换皮肤也能跟换武器。

其他问题:

一、能否使用任意图片替换 Spine 动画中的插槽(Slot)?

不能直接使用任意图片替换 Spine 动画中的插槽(Slot),必须使用和导出的 Spine 图集相关联的图片。这是 Spine 运行机制所决定的。

Spine 的附件(Attachment)机制基础

Spine 使用 预先打包的图集(.atlas)动画数据(.json 或 .skel) 来驱动动画。其关键组成如下:

项目说明
.png 图片原始图片资源,被 Spine 用于绑定动画中的各个部位(region)
.atlas 文件描述图片中每个附件的名称、UV 坐标、大小等
.json/.skel描述骨骼、插槽、动画关键帧等

当 Spine 在运行时执行动画时,它使用 .atlas 文件和骨骼数据来查找某个 Slot 要显示哪张图片。这个图片必须在 .atlas 中注册,才能被运行时找到。

1. Spine Runtime 只能识别 Atlas 中注册的图片

  • Spine 动态换图时调用的 FindRegion(name) 只能查找 .atlas 中存在的 Region 名称

  • 没有被打包进 .atlas 的图片根本不在 Spine 的图集纹理内,也没有相应的 UV 信息,因此不能渲染出来。

2. Spine 的 Attachment 需要与 AtlasRegion 配对

  • region.ToRegionAttachment(name) 会根据该 Region 的 UV、大小、旋转等数据创建一个 RegionAttachment

  • 如果你图片不在 .atlas 中,就无法创建合法的 RegionAttachment

相关文章:

unity+ spine切换武器不换皮肤解决方案

1.在spine编辑中获取到角色武器插槽名称 这里的武器插槽名称为“zj_22”。角色的spine正常导出到unity中。 2.将需要替换的武器图片单独放在一个spine项目里面&#xff0c;并为每个武器单独建立一个插槽。 而且全部放在根骨骼Root下。 3.将武器的spine动画导出&#xff0c;会…...

[java八股文][MySQL面试篇]SQL基础

NOSQL和SQL的区别&#xff1f; SQL数据库&#xff0c;指关系型数据库 - 主要代表&#xff1a;SQL Server&#xff0c;Oracle&#xff0c;MySQL(开源)&#xff0c;PostgreSQL(开源)。 关系型数据库存储结构化数据。这些数据逻辑上以行列二维表的形式存在&#xff0c;每一列代表…...

Ubuntu中SSH服务器安装使用

SSH服务安装 1. 安装 OpenSSH 安装 SSH 服务端&#xff08;允许远程登录&#xff09; sudo apt update sudo apt install openssh-server安装 SSH 客户端&#xff08;用于连接其他服务器&#xff09; sudo apt install openssh-client2. 检查 SSH 服务状态 sudo systemctl…...

【AI论文】SWE-rebench:一个用于软件工程代理的任务收集和净化评估的自动化管道

摘要&#xff1a;基于LLM的代理在越来越多的软件工程&#xff08;SWE&#xff09;任务中显示出有前景的能力。 然而&#xff0c;推进这一领域面临着两个关键挑战。 首先&#xff0c;高质量的训练数据稀缺&#xff0c;尤其是反映现实世界软件工程场景的数据&#xff0c;在这些场…...

Flask文件处理全攻略:安全上传下载与异常处理实战

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...

【算法深练】分组循环:“分”出条理,化繁为简

目录 引言 分组循环 2760. 最长奇偶子数组 1446. 连续字符 1869. 哪种连续子字符串更长 2414. 最长的字母序连续子字符串的长度 3456. 找出长度为 K 的特殊子字符串 1957. 删除字符使字符串变好 674. 最长连续递增序列 978. 最长湍流子数组 2110. 股票平滑下跌阶段的…...

焊缝缺陷焊接缺陷识别分割数据集labelme格式5543张4类别

数据集中有超过一半为增强图片&#xff0c;请认真观察图片预览 数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数)&#xff1a;5543 标注数量(json文件个数)&#xff1a;5543 标注类别数&#xff1a;4…...

关于scrapy在pycharm中run可以运行,但是debug不行的问题

关于scrapy在pycharm中run模式可以运行&#xff0c;但是debug模式不行的问题 文章目录 关于scrapy在pycharm中run模式可以运行&#xff0c;但是debug模式不行的问题查了下原因 点击run就可以运行&#xff0c;但是debug就是运行不了 一点击debug就报这个错&#xff0c;也不知道啥…...

Java高级 | 【实验四】Springboot 获取前端数据与返回Json数据

隶属文章&#xff1a; Java高级 | &#xff08;二十二&#xff09;Java常用类库-CSDN博客 系列文章&#xff1a; Java高级 | 【实验一】Spring Boot安装及测试 最新-CSDN博客 Java高级 | 【实验二】Springboot 控制器类相关注解知识-CSDN博客 Java高级 | 【实验三】Springboot …...

云数据库选型指南:关系型 vs NoSQL vs NewSQL的企业决策

在云时代&#xff0c;数据库选型直接关系到企业应用性能和成本效益。本文深入分析三大数据库类型&#xff0c;助您做出明智决策。 目录概览 关系型数据库&#xff1a;经典之选NoSQL数据库&#xff1a;灵活应对非结构化数据NewSQL数据库&#xff1a;融合的优势三大数据库对比分…...

Prj08--8088单板机C语言8255读取按键码

1.验证结果 2.代码片 key_codeinp(PORT_8255_C)&0x0f;tiny_sprintf(buffer,"Key_code 0X%x \r\n",key_code);uart_str_send(buffer); 3.完整代码 #include "tiny_stdarg.h" // 使用自定义可变参数实现#define ADR_273 0x0200 #define ADR_244 0x…...

蜜獾算法(HBA,Honey Badger Algorithm)

2021年由Hashim等人提出&#xff08;论文&#xff1a;Honey Badger Algorithm: A New Metaheuristic Algorithm for Solving Optimization Problems&#xff09;。模拟蜜獾在自然界中的智能捕食行为&#xff0c;属于群体智能优化算法&#xff08;与粒子群PSO、遗传算法GA同属一…...

Modbus转Ethernet IP网关助力罗克韦尔PLC数据交互

在工业自动化领域&#xff0c;Modbus协议是一种广泛应用的串行通信协议&#xff0c;它定义了主站和从站之间的通信规则和数据格式。罗克韦尔PLC是一种可编程的逻辑控制器&#xff0c;通过Modbus协议实现与其他设备之间的数据交互。然而&#xff0c;随着以太网技术的普及和发展&…...

飞算JavaAI 炫技赛重磅回归!用智能编码攻克老项目重构难题

深夜还在排查十年前Hibernate框架埋下的N1查询隐患&#xff1f;跨语言迁移时发现SpringMVC控制器里的业务逻辑像一团乱麻&#xff1f;当企业数字化进入深水区&#xff0c;百万行代码的老系统就像一座随时可能崩塌的"技术债冰山"。近日&#xff0c;飞算科技发布JavaAI…...

青少年编程与数学 02-020 C#程序设计基础 15课题、异常处理

青少年编程与数学 02-020 C#程序设计基础 15课题、异常处理 一、异常1. 异常的分类2. 异常的作用小结 二、异常处理1. 异常处理的定义2. 异常处理的主要组成部分3. 异常处理的作用小结 三、C#异常处理1. 异常的基本概念2. 异常处理的关键字3. 异常处理的流程4. 自定义异常5. 异…...

Electron打包前端和后端为exe

文章目录 什么是Electron&#xff1f; 安装electron过程 其他git项目地址比较好的文章electron的替代品安装报错 npm ERR! request to https://registry.npm.taobao.org/electron failed, reason: certificate has expired安装提示 npm WARN deprecated boolean3.2.0: Package …...

unix/linux,sudo,一个强大且灵活的工具,允许一个被授权的用户以另一个用户(通常是root,即超级用户)的身份来执行命令

sudo:不仅仅是“用管理员权限运行” sudo 这个词,来源于 SuperUser DO (或者 Substitute User DO,后者的含义更为广阔和准确)。它是一个强大且灵活的工具,允许一个被授权的用户以另一个用户(通常是root,即超级用户)的身份来执行命令。 1. Unix/Linux 的权限哲学:最小…...

JavaScript 二维数组初始化:为什么 fill([]) 是个大坑?

JavaScript 二维数组初始化&#xff1a;为什么 fill([]) 是个大坑&#xff1f; 今天刷leetcode的时候&#xff0c;遇到一个神奇的bug。 当我修改数组中的一个元素&#xff0c;却意外影响了其他所有元素&#xff1f;&#xff1f;&#xff1f;。 问题重现&#xff1a;诡异的数组…...

项目任务,修改svip用户的存储空间。

修改存储空间 3GB->5GB&#xff0c;这是项目任务&#xff0c;首先有人任务就要去思考实现思路&#xff0c;首先存储空间&#xff0c;也就是说不只是前端样式3GB改一下就可以了&#xff0c;那用户实际还是3GB&#xff0c;所以我们去网站看后端谁返回给我们了3GB&#xff0c;我…...

TypeScript 全面学习指南 (2025最新版)

TypeScript 全面学习指南 目录 TypeScript 简介环境搭建与工具基础类型变量声明接口&#xff08;Interfaces&#xff09;类&#xff08;Classes&#xff09;函数&#xff08;Functions&#xff09;泛型&#xff08;Generics&#xff09;枚举&#xff08;Enums&#xff09;类型…...

【redis】过期策略 懒惰删除

过期删除&#xff1a; redis会将所有设置过期时间的key以及过期时间存储在字典里。 redis采取两个策略实现删除过期key&#xff1a; 1、定时删除&#xff1a;定期扫描字典&#xff0c;采用贪心的策略&#xff0c;从字典随机抽20个key&#xff0c;删除其中已经过期的key&#x…...

Docker或Docker-Compose时间时区配置

Docker或Docker-Compose配置时区&#xff0c;主要是为了使用容器内的时间和物理机操作系统的时间保持一致。以下是集中配置Docker或Docker-Compose环境时间时区的方式。 Dockerfile&#xff08;Docker&#xff09;中配置时区 在Dockerfile中&#xff0c;可以通过如下方式添加…...

如何在IDE中通过Spark操作Hive

在IDE中通过Spark操作Hive是一项常见的任务&#xff0c;特别是在大数据处理和分析的场景中。本文将详细介绍如何在集成开发环境&#xff08;IDE&#xff09;中使用Apache Spark与Hive进行交互&#xff0c;包括必要的设置、代码示例以及详细解释。 环境准备 在开始之前&#x…...

ToolsSet之:XML工具

ToolsSet是微软商店中的一款包含数十种实用工具数百种细分功能的工具集合应用&#xff0c;应用基本功能介绍可以查看以下文章&#xff1a; Windows应用ToolsSet介绍https://blog.csdn.net/BinField/article/details/145898264 ToolsSet中Text菜单下的XML Tool工具是一个Xml工…...

keepalived定制日志bug

keepalived定制日志bug 源码安装apt安装endl 源码安装 在/etc/rsyslog.d/目录下创建 keepalived的日志配置文件keepalived.conf [rootubuntu24-13:~]# vim /etc/rsyslog.d/keepalived.conf [rootubuntu24-13:~]# cat /etc/rsyslog.d/keepalived.conf local6.* /var/log/keepa…...

ElasticSearch+Gin+Gorm简单示例

更多个人笔记见&#xff1a; &#xff08;注意点击“继续”&#xff0c;而不是“发现新项目”&#xff09; github个人笔记仓库 https://github.com/ZHLOVEYY/IT_note gitee 个人笔记仓库 https://gitee.com/harryhack/it_note 个人学习&#xff0c;学习过程中还会不断补充&…...

数据库系统概论(十三)详细讲解SQL中数据更新(插入,修改与更新)

数据库系统概论&#xff08;十三&#xff09;详细讲解SQL中数据更新 前言一、数据插入1. 插入数据是什么&#xff1f;2.插入单条数据&#xff08;插入元组&#xff09;场景 1&#xff1a;指定部分列插入场景 2&#xff1a;不指定列名&#xff08;插入所有列&#xff09;场景 3&…...

JVMTI 在安卓逆向工程中的应用

JVMTI 在安卓逆向工程中的应用 JVMTI 在安卓逆向工程中扮演着重要角色&#xff0c;尤其是在分析和修改 Java 层应用行为时。以下是其核心应用场景、实现方式及典型工具&#xff1a; 一、核心应用场景 1. 动态代码注入与 hook 通过 JVMTI 可以在运行时修改或拦截 Java 方法&…...

极客时间-《搞定音频技术》-学习笔记

极客时间-《搞定音频技术》-学习笔记 语音基础知识 https://www.zhangzhenhu.com/audio/feature.html 序章-0 作者说这个语音技术啊&#xff0c;未来肯定前景大好啊&#xff0c;大家都来学习&#xff0c;然后给出了课程的脑图 音频基础 什么是声音 声音的三要素是指响度、…...

网络攻防技术十三:网络防火墙

文章目录 一、网络防火墙概述1、网络型防火墙&#xff08;网络防火墙&#xff09;2、Web应用防火墙3、数据库防火墙4、主机防火墙&#xff08;个人防火墙&#xff09;5、网络防火墙的功能 二、防火墙工作原理1、无状态包过滤防火墙2、有状态包过滤防火墙&#xff08;状态检测/动…...