Unity使用打成图集的Sprite作为模型贴图使用的问题

  大家好,我是阿赵。
  有时候用Unity引擎做项目的时候,会遇到这样的需求,美术做了一些模型或者特效,然后策划想在游戏运行的时候,读取一些游戏图标放在特效或者模型上面当做贴图使用。
  这个需求实现起来很简单,比如这样:
在这里插入图片描述

  我这里随便找了一些icon图片,在Unity里面设置成了Sprite的贴图类型。并且输入了Packing Tag,意思是这些图片将会作为一个图集来使用。
在这里插入图片描述

  然后我建了一个面片,当做模型。
在这里插入图片描述

  接下来写代码了,代码很简单:

    private void SetTextureBySprite(Sprite sp){render.material.SetTexture("_MainTex", sp.texture);}

  在编辑器里面执行代码,会发现贴图被赋予上去了:
在这里插入图片描述

  不过,如果我们实际打包游戏运行之后,会发现效果是不对的:
在这里插入图片描述

  为什么会出现编辑器和实际打包运行效果不一致的情况呢?
  这是因为上面我设置了Packing Tag,这样,同一个Tag的图片,将会打包成一个图集。
  由于打图集的时间比较长,所以一般来说在编辑器环境下,会把图集取消掉:
在这里插入图片描述

  勾选Disabled或者Enabled For Builds,在编辑器都是不打图集就运行的。
  如果想在编辑器里面就能看到图集效果,要选Always Enabled,这样编辑器里面运行的效果就和打包之后的效果一致了。不过这样每次图集里面的图片有改动时,Unity会先重新生成图集,会比较慢。
在这里插入图片描述

  用SpritePacker看一下:
在这里插入图片描述
在这里插入图片描述

  在实际运行中,这些icon的贴图不再是单张的Texture,而是组合成这样一张贴图了。
  再查看一下Unity的API:
在这里插入图片描述

  里面很明确的说明了,假如packed了,sprite.texture指向的是整个图集。
  怎样解决这个问题呢?
  再继续看Unity的API:
在这里插入图片描述

  Unity提供了textureRect的API,可以把原来的Sprite在现在整张图集所占的位置通过Rect返回。于是我们就可以用这个Rect来计算,实际的Sprite占整张图集的位置,也就是求出了采样的UV坐标了:

    private void SetTextureBySpriteRect(Sprite sp){Texture2D tex = sp.texture;float texWidth = tex.width;float texHeight = tex.height;Rect rect = sp.textureRect;Vector4 uv =new  Vector4(rect.width / texWidth, rect.height / texHeight, rect.x/tex.width, rect.y/tex.height);render.material.SetTexture("_MainTex", sp.texture);render.material.SetVector("_MainTex_ST", uv);}

  这里注意的是,求出的UV,是通过SetVector设置进材质球的,用的变量名_MainTex_ST是对应主贴图_MainTex的,熟悉写Shader的朋友应该都知道,你声明了一张贴图置换,贴图名称后面接_ST就是这张贴图的UV。
  所以这里通过_MainTex_ST设置UV不是固定的,要根据你实际的贴图名称来改。
  最后运行代码,这次显示就应该是正确的了,其实这里面的原理,和之前说的地形局部采样UV是一样的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/201489.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

销售人员如何自我提升?

销售人员如何自我提升? 在美国有这么一句流行语:不当总统就干销售员。其实在国内很多老板,高收入人群等大部分是来自销售岗位。因为销售是离钱最近的职业,在销售职业生涯中能收获到很多,比如人际关系能力,…

【刘二大人】pytorch深度学习实践(三):如何实现线性模型的反向传播+代码实现详解(Tensor、backward函数)

目录 参考资料一、反向传播流程1.1 问题1.2 方法1.3 步骤1.4 例题 二、Pytorch中前向传播和反馈的计算2.1 tensor数据类型2.2 定义线性模型并且计算损失2.2.1 torch.tensor.item()2.2.2 代码 2.3 反向传播2.3.1 torch.tensor.backward()2.3.2 tensor.zero_( )2.3.3 代码实现 三…

SystemWeaver—电子电气系统协同研发平台

背景概述 当前电子电气系统在汽车领域应用广泛,其设计整合了多门工程学科,也因系统的复杂性、关联性日益提升,需要其提供面向软件、硬件、网络、电气等多领域交织而导致的复杂系统解决方案。并且随着功能安全、AUTOSAR、SOA、以太网通讯等新要…

Linux基础命令(测试相关)

软件测试相关linux基础命令笔记 操作系统 常见Linux: Redhat系列:RHSL、Centos、FedoraDebian系列:Debian、Ubuntu以上操作系统都是在原生Linux系统上,增加了一些软件或功能。linux的文件及路径特点 Linux没有盘符的概念&#xf…

群星璀璨!亚信科技、TM Forum联合举办数字领导力中国峰会,助百行千业打造转型升级双引擎

11月30日,亚信科技携手著名国际组织TM Forum(TeleManagement Forum 电信管理论坛)联合举办的2023数字领导力中国峰会在京隆重召开,国内外数百位行业领袖、专家学者、企业高管和生态伙伴齐聚一堂。大会由“数字领导力峰会”“IT数字…

奇迹单车^^

欢迎来到程序小院 奇迹单车 玩法&#xff1a;点击鼠标左键跳跃&#xff0c;不要碰到地上的路障和天上飞的小鸟&#xff0c;统计骑行里程数&#xff0c;快去骑单车吧^^。开始游戏 html <div id"game" style"height: 523px;"></div>css canvas…

学习ShardingSphere前置知识

学习ShardingSphere前置准备知识 一. SPI SPI&#xff08;Service Provider Interface&#xff09;是一种Java的扩展机制&#xff0c;用于实现组件之间的松耦合。在SPI模型中&#xff0c;服务提供者&#xff08;Service Provider&#xff09;定义了一组接口&#xff0c;而服务…

科技论文中的Assumption、Remark、Property、Lemma、Theorem、Proof含义

一、背景 学控制、数学、自动化专业的学生在阅读论文时&#xff0c;经常会看到Assumption、Remark、Property、Lemma、Theorem、Proof等单词&#xff0c;对于初学者可能不太清楚他们之间的区别&#xff0c;因此这里做一下详细的说明。 以机器人领域的论文为例。 论文题目&…

PHP+ajax+layui实现双重列表的动态绑定

需求&#xff1a;商户下面有若干个门店&#xff0c;每个门店都需要绑定上收款账户 方案一&#xff1a;每个门店下面添加页面&#xff0c;可以选择账户去绑定。&#xff08;难度&#xff1a;简单&#xff09; 方案二&#xff1a;从商户进入&#xff0c;可以自由选择门店&#…

Python源码:03turtle画一个奥运五环图

turtle 模块绘制一些基本图形&#xff0c;是 Python 标准库中的一个绘图模块&#xff0c;可以用于绘制各种图形&#xff0c;包括线条、多边形、圆形、文本等。 下面是用Python绘制奥运五环图的代码&#xff1a; import turtle # 设置画布大小 turtle.setup(600, 600) # 绘…

喜报!博睿数据荣获“2023年度卓越数字创新企业”

12月5日&#xff0c;由《经济观察报》主办的“2023年创新峰会”在北京隆重举办&#xff0c;会议邀请行业专家和领军企业&#xff0c;站在未来的视角&#xff0c;为当下的市场发展提供洞见。期间&#xff0c;备受瞩目的2023年度卓越创新案例评审结果正式发布&#xff0c;博睿数据…

MES管理系统在生产计划排程中的应用与价值

随着制造业市场竞争的日益激烈和客户需求的多样化&#xff0c;传统的生产计划排程方式已经无法满足企业的需求。为了提升生产计划的效率和准确性&#xff0c;越来越多的企业开始引入MES管理系统这一先进的工具。那么&#xff0c;MES管理系统到底是什么&#xff0c;又是如何解决…

揭秘AI魔法绘画:Stable Diffusion引领无限创意新纪元

文章目录 1. 无限的创意空间2. 高效的创作过程3. 个性化的艺术表达4. 跨界合作的可能性5. 艺术教育的革新6. 艺术市场的拓展 《AI魔法绘画&#xff1a;用Stable Diffusion挑战无限可能》编辑推荐内容简介作者简介精彩书评目录前言/序言本书读者对象学习建议获取方式 随着科技的…

RocketMq环境搭建

目录 MQ作用 RocketMQ背景 MQ对比 RocketMQ环境搭建 搭建dashboard可视化界面 MQ作用 异步解耦削峰 RocketMQ背景 ​ RocketMQ是阿里巴巴开源的一个消息中间件&#xff0c;在阿里内部历经了双十一等很多高并发场景的考验&#xff0c;能够处理亿万级别的消息。2016年开源…

跨端的三种方案原理和对比(WebView,ReactNative,Flutter)

一、定义 WebView WebView是什么&#xff1f; 答&#xff1a; 第一代跨平台框架&#xff0c;代表者为&#xff1a;PhoneGap、微信小程序。 WebView标签是一种用于在网页中嵌入浏览器窗口的HTML元素。它的底层原理是通过原生平台提供的浏览器引擎来实现网页的渲染和交互。 …

windows下DSS界面本地集成linkis管理台

说明&#xff1a;当前开发环境为windows&#xff0c;node版本使用16.15.1。启动web时&#xff0c;确保后端服务已准备就绪。 1.linkis web编译 #进入项目WEB根目录 $ cd linkis/linkis-web #安装项目所需依赖 $ npm install参考官方编译说明&#xff0c;windows下编译一直异常…

代理IP和网络加速器的区别有哪些

随着互联网的普及&#xff0c;越来越多的人开始使用网络加速器来提高网络速度。然而&#xff0c;很多人并不清楚代理IP和网络加速器之间的区别。本文将详细介绍两者的概念及区别。 一、代理IP 代理IP是一种通过代理服务器进行网络连接的方式。在使用流冠代理IP时&#xff0c;用…

数据结构算法-希尔排序

引言 在一个普通的下午&#xff0c;小明和小森决定一起玩“谁是老板”的扑克牌游戏。这次他们玩的可不仅仅是娱乐&#xff0c;更是要用扑克牌来决定谁是真正的“大老板”。 然而&#xff0c;小明的牌就像刚从乱麻中取出来的那样&#xff0c;毫无头绪。小森的牌也像是被小丑掷…

视觉检测系统在半导体行业的应用

一、半导体产业链概述 半导体产业链是现代电子工业的核心组成部分&#xff0c;涵盖了从原材料到最终产品的整个生产过程。这个产业链主要分为以下几个环节&#xff1a; 1.原材料供应&#xff1a;半导体行业的基石是半导体材料&#xff0c;如硅片、化合物半导体等。这些材料需要…

搭建CIG容器重量级监控平台

CIG简介 CIG监控平台是基于CAdvisor、InfluxDB和Granfana构建的一个容器重量级监控系统&#xff0c;用于监控容器的各项性能指标&#xff0c;通过三者的结合&#xff0c;CIG监控平台可以实现对容器性能的全面监控和可视化展示&#xff0c;为容器的性能和运行状态提供了一个全面…