Unity Spine 换图(通过外部图片)

2023-05-16

在spine中,如果想通过外部一张单独的来替换动画中的某个部位,需要手动创建Attachment

using UnityEngine;
using System.Collections;
using Spine.Unity;

public class ChangeSkin : MonoBehaviour {

	private SkeletonAnimation anim;
	public Texture2D t;
	public Texture2D t2;

	// Use this for initialization
	IEnumerator Start () {
		anim = GetComponent<SkeletonAnimation>();

		yield return new WaitForSeconds(0.2f);

		Material m = CreateMeshAttachmentByTexture(anim.skeleton.FindSlot("body"),t2);
		//换下一张图片,如果是动态加载的图片,需要消除之前的DestroyImmediate(m.mainTexture,false);
		m.mainTexture = t;
	}

	/// <summary>
	/// Creates the region attachment by texture.
	/// </summary>
	/// <returns>The region attachment by texture.</returns>
	/// <param name="slot">Slot.</param>
	/// <param name="texture">Texture.</param>
	public Material CreateRegionAttachmentByTexture(Spine.Slot slot, Texture2D texture)
	{
		if(slot==null) return null;

		Spine.RegionAttachment oldAtt = slot.Attachment as Spine.RegionAttachment;
		if(oldAtt==null || texture==null) return null;

		Spine.RegionAttachment att = new Spine.RegionAttachment(oldAtt.Name);
		att.RendererObject = CreateRegion(texture);
		att.Width = oldAtt.Width;
		att.Height = oldAtt.Height;
		att.offset = oldAtt.offset;
		att.Path = oldAtt.Path;
	
		att.X = oldAtt.X;
		att.y = oldAtt.Y;
		att.Rotation = oldAtt.Rotation;
		att.ScaleX = oldAtt.ScaleX;
		att.ScaleY = oldAtt.ScaleY;

		att.SetUVs(0f,1f,1f,0f,false);

		Material mat = new Material(Shader.Find("Sprites/Default"));
		mat.mainTexture = texture;
		(att.RendererObject as Spine.AtlasRegion).page.rendererObject = mat;

		slot.Attachment = att;
		return mat;
	}

	/// <summary>
	/// Creates the mesh attachment by texture.
	/// </summary>
	/// <returns>The mesh attachment by texture.</returns>
	/// <param name="slot">Slot.</param>
	/// <param name="texture">Texture.</param>
	public Material CreateMeshAttachmentByTexture(Spine.Slot slot, Texture2D texture)
	{
		if(slot==null) return null;
		Spine.MeshAttachment oldAtt = slot.Attachment as Spine.MeshAttachment;
		if(oldAtt==null || texture==null) return null;

		Spine.MeshAttachment att = new Spine.MeshAttachment(oldAtt.Name);
		att.RendererObject = CreateRegion(texture);
		att.Path = oldAtt.Path;

		att.Bones = oldAtt.Bones;
		att.Edges = oldAtt.Edges;
		att.Triangles = oldAtt.triangles;
		att.Vertices = oldAtt.Vertices;
		att.WorldVerticesLength = oldAtt.WorldVerticesLength;
		att.HullLength = oldAtt.HullLength;
		att.RegionRotate = false;

		att.RegionU = 0f;
		att.RegionV = 1f;
		att.RegionU2 = 1f;
		att.RegionV2 = 0f;
		att.RegionUVs = oldAtt.RegionUVs;

		att.UpdateUVs();

		Material mat = new Material(Shader.Find("Sprites/Default"));
		mat.mainTexture = texture;
		(att.RendererObject as Spine.AtlasRegion).page.rendererObject = mat;

		slot.Attachment = att;
		return mat;
	}



	private Spine.AtlasRegion CreateRegion(Texture2D texture){

		Spine.AtlasRegion region = new Spine.AtlasRegion();
		region.width = texture.width;
		region.height = texture.height;
		region.originalWidth = texture.width;
		region.originalHeight = texture.height;
		region.rotate = false;
		region.page = new Spine.AtlasPage();
		region.page.name = texture.name;
		region.page.width = texture.width;
		region.page.height = texture.height;
		region.page.uWrap = Spine.TextureWrap.ClampToEdge;
		region.page.vWrap = Spine.TextureWrap.ClampToEdge;

		return region;
	}

}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity Spine 换图(通过外部图片) 的相关文章

  • 【CUDA入门笔记】概述

    1 xff0c CUDA架构 xff08 1 xff09 一个GPU包含多个多核处理器 xff1b xff08 2 xff09 一个多核处理器包含多个线程处理器 xff08 3 xff09 线程处理器是最基本的计算单元 xff0c 有自己的

随机推荐

  • 【CUDA入门笔记】CUDA内核与线程配置

    1 CUDA核函数 在GPU上调用的函数成为CUDA核函数 Kernel function xff0c 核函数会被GPU上的多个线程执行 每个线程都会执行核函数里的代码 xff0c 当然由于线程编号的不同 xff0c 执行的代码路径可能会有
  • 【CUDA入门笔记】GPU存储结构模型(1)

    GPU存储结构模型 1 CPU可以读写GPU设备中的Global Memory Constant Memory以及Texture Memory内存储的内容 xff1b 主机代码可以把数据传输到设备上 xff0c 也可以从设备中读取数据 xf
  • 【CUDA入门笔记】GPU存储结构模型(2)

    GPU存储结构模型 1 CPU可以读写GPU设备中的Global Memory Constant Memory以及Texture Memory内存储的内容 xff1b 主机代码可以把数据传输到设备上 xff0c 也可以从设备中读取数据 xf
  • 基于多二维码识别的无人机运动真值获取

    基于多二维码识别的三维运动真值获取 1 背景介绍2 原理2 1 二维码基础2 2图像预处理2 3 定位标轮廓提取2 4 多二维码鲁棒识别 3 运行结果3 1对单张图片进行多二维码识别3 2 获取一系列静止图片的轨迹3 3 相机做圆周运动的轨
  • c++实现简单http服务器

    http基于tcp协议的应用层协议 xff0c 说白了就是写死的自定义协议 xff0c 代码实现了简单的get请求 xff0c 打开服务后 xff0c 可以通过网站访问本地资源 xff0c 适合新手学习的简单代码 xff0c 有助于理解ge
  • 基于NRF24L01的CAN数据透传

    闲谈 xff1a 闲来无聊 xff0c 恰好公司又经常用CAN数据的传输 xff0c 自己觉得要是用无线传送多好 xff0c 然后 xff0c 就是一个奇想 xff0c 就想做一个无线数据的透传 xff0c 恰好身边又有NRF24L01 那
  • 倾斜补偿的电子罗盘(1):地磁场,磁传感器,倾斜补偿

    倾斜补偿的电子罗盘 1 xff1a 地磁场 xff0c 磁传感器 xff0c 倾斜补偿 地磁场和磁传感器 地磁场可以用于获取方位信息 以北半球为例 xff0c 地磁场方向不是与地面水平 xff0c 而是与水平方向有一定的倾角 xff08 指
  • vscode常用插件

    vscode常用插件 1 Markdown All In One 在所有拓展插件中 xff0c 这个插件基础功能最全 xff0c 快捷键多 xff0c 方便使用 2 Markdown Toc 这个插件是用来生成目录 xff0c 这个插件我用
  • typescript中使用字典Dictionary

    key为string value为number var map key string number 61 34 t 34 3 34 o 34 5 34 g 34 10 for let k in map egret log map k
  • Qt Design Studio社区版安装与使用

    Qt Design Studio社区版免费下载 由于登录官网不能下载 xff0c 找到镜像网站进行下载 xff1a 基于msvc 2019 64位 xff1a http iso mirrors ustc edu cn qtproject o
  • vscode用conda配置Python虚拟环境

    1 到官网下载Anaconda2 下载vscode中Python插件3 以管理员身份运行vscode4 利用conda创建python虚拟环境5 在vscode中配置Setting json添加Python路径6 最后检验运行Python项
  • 阿里云搭建ftp服务器+FileZilla客户端查看文件

    文章目录 1 阿里云搭建ftp服务器1 1 安装ftp服务器1 2 设置阿里云ECS的安全组 2 FileZilla客户端查看文件 1 阿里云搭建ftp服务器 1 1 安装ftp服务器 1 安装vsftp xff0c sudo span c
  • QtCreator+windows崩溃定位分析

    文章目录 一 Qt程序Release版本记录崩溃信息 xff0c 并定位问题代码1 Release版本程序中生成pdb调试信息文件2 添加代码将程序崩溃时的堆栈保存为crash dmp文件3 使用 WinDbg 分析crash dmp文件
  • Qt项目入门

    一个简单的项目 该项目涉及tcp服务端客户端通信 xff0c 数据库操作 xff0c Log4Qt日志打印 xff0c 不过是关于工业与上位机的一个简单项目处理 xff0c 过程不一定容易理解 xff0c 附上通讯协议 Qt5 12 Min
  • delete this注意事项

    参考资料 在类中调用delete this问题
  • c++较常用的库函数

    不知道原创是谁 xff0c 转载自 xff1a https blog csdn net laozhuxinlu article details 51878947 C 43 43 常用库函数 如图1所示 xff0c 常用数学函数 头文件 in
  • 学习c++的50个网站

    原 xff1a http blog chinaunix net uid 20548989 id 2979724 html 大家都说学Java好找工作 xff0c 可是Java我都遗忘好久了 xff0c 大一大二荒废了 xff0c 没好好练编
  • 数据预处理-数据清洗之numpy创建及属性

    什么是数据预处理 xff1f 数据预处理 xff08 data preprocessing xff09 是指在主要的处理以前对数据进行的一些处理 一般我们得到的数据会存在有缺失值 重复值等 xff0c 在使用之前需要进行数据预处理 它是一系
  • 数据预处理-数据清洗之numpy访问与计算

    如何访问numpy数组中的元素 xff1f 采用索引或者切片的方式 span class token comment 导入包 span span class token keyword import span numpy span clas
  • Unity Spine 换图(通过外部图片)

    在spine中 xff0c 如果想通过外部一张单独的来替换动画中的某个部位 xff0c 需要手动创建Attachment using UnityEngine using System Collections using Spine Unit