unity material之tiling和offset属性
在Unity中,使用材质或者着色器是通过创建一个材质来实现的,新建一个材质,会要求选择使用哪个着色器,默认的是Diffuse着色器。确定了着色器后,在材质属性面板中就会出现该着色器需要用到的一些属性,一般是贴图及对应的属性。
材质中贴图均有tiling和offset两个属性,它们用来定义当前材质球所使用的贴图区域(
直接将贴图贴到平面上一般会出现X和Y坐标倒置的问题,这个时候可以将tiling取反或者旋转贴图所在平面进行调整)。
offset:指明使用贴图的起始位置,取值范围为0-1
tiling:指明从offset位置处的大小区域,区域的取值范围一般为(-1,1),超过的话部分会按比例生成新的区域拼接上原先的。
也就是说,tiling指明了使用的贴图为输入贴图的多少倍,超过1的会自动拼接,同时offset指明了使用的贴图在输入贴图处的起始位置,假如位置超过了1,就会对1取余。
以一张图片为例,下面分别为原图和直接贴到一个平面上的效果
![](/assets/blank.gif)
平面贴图后出现了X和Y方向倒置问题
下面是使用各种不同tiling和offset下的效果
![](/assets/blank.gif)
可以通过更新材质的offset和tiling属性来制作动画
下图是16个表情格图标,可以每次只显示图标中的某一小块区域来形成动画,参见这里
![](/assets/blank.gif)
using UnityEngine;
using System.Collections;public class Test : MonoBehaviour {// Use this for initializationpublic int colCount = 4;public int rowCount = 4;//vars for animationpublic int rowNumber = 0; //Zero Indexedpublic int colNumber = 0; //Zero Indexedpublic int totalCells = 16;public int fps = 10;//Maybe this should be a private varprivate Vector2 offset;//Updatevoid Update () { SetSpriteAnimation(colCount,rowCount,rowNumber,colNumber,totalCells,fps); }//SetSpriteAnimationvoid SetSpriteAnimation(int colCount ,int rowCount ,int rowNumber ,int colNumber,int totalCells,int fps ){// Calculate indexint index = (int)(Time.time * fps);// Repeat when exhausting all cellsindex = index % totalCells;// Size of every cellfloat sizeX = 1.0f / colCount;float sizeY = 1.0f / rowCount;Vector2 size = new Vector2(sizeX,sizeY);// split into horizontal and vertical indexvar uIndex = index % colCount;var vIndex = index / colCount;// build offset// v coordinate is the bottom of the image in opengl so we need to invert.float offsetX = (uIndex+colNumber) * size.x;float offsetY = (1.0f - size.y) - (vIndex + rowNumber) * size.y;Vector2 offset = new Vector2(offsetX,offsetY);renderer.material.SetTextureScale ("_MainTex", size);renderer.material.SetTextureOffset ("_MainTex", offset);}}
播放后即可得到动态显示每个子图标的动画
unity material之tiling和offset属性相关推荐
- 图文详解Unity3D中Material的Tiling和Offset是怎么回事
图文详解Unity3D中Material的Tiling和Offset是怎么回事 Tiling和Offset概述 Tiling表示UV坐标的缩放倍数,Offset表示UV坐标的起始位置. 这样说当然是隔 ...
- Material 的 Tiling 和 Offset
一Tiling 和 Offset 概述 二示例 三SetTextureScale 和 SetTextureOffset 参考 一.Tiling 和 Offset 概述 在 Unity 中,新建一个材质 ...
- jxls向右循环为什么会间隔单元格_VBA中单元格的Offset属性,你是否能灵活的利用呢?...
大家好,我们今日继续讲解VBA代码解决方案的第122讲内容:如何在VBA中使用单元格Offset 属性.其实这讲的内容非常的简单,只是有很多的朋友要求再详细的讲一下,顺便再引申一下.谈到Offset属 ...
- Js之offset属性与style属性的区别
Js之offset属性 offset翻译过来就是偏移量, 我们使用 offset 系列相关属性可以动态的得到该元素的位置.大小等. 如果元素没有父级元素或者父级元素没有定位(祖先元素也可以),则以bo ...
- Unity 之 打包参数 -- Player面板属性详解
Unity 之 Project Setting -- Player 面板属性详解 前言 一,Player 1.1 属性说明 1.2 效果展示 二,ICON(图标) 2.1 属性说明 2.2 使用示例 ...
- Unity Tiling和offset的使用
offset是显示框的偏移量 1)拿flappy bird素材来说,起始状态是这种↓. 注意显示框(黄色).它包含的范围是这种↓ 2)当offset_x设置为0.5的时候,显示框(黄色)包含的范围应该 ...
- Unity着色器常用关键字及属性
看了好多次shader,不过还是感觉无从下手的去写shader,然后看shader的效果 个人认为还是因为shader基础打得不够扎实,顾特意再重温shader相关书籍的时候,看见有些常用关键字时,把 ...
- unity Material的批量修改和单独处理
蹭一波1024的热度,祝大家节日快乐. Material unity为我们提供了Material这一模块,使得我们对游戏对象的各种渲染操作更加便捷. 一个完整的Material由shader和Text ...
- Unity如何批量修改材质的属性
Unity导入fbx资源文件的时候,需要修改材质的某个属性,其实修改某个属性为同一个值还是比较简单的,只需要全选所有的材质,然后在Inspector里面进行修改就行了,就会批量修改所有的材质属性. 如 ...
最新文章
- K-均值聚类(K-Means) C++代码实现
- Fedora开启ssh服务
- 32M内存 跑linux内核,32位Linux单进程4G内存限制
- 这种奇奇怪怪的符号,只能用latex打出来,如果实在不行,>---|-->>也行
- 使用Cobertura,JUnit,HSQLDB,JPA涵盖您的测试
- Linux C 编程技巧--利用有限状态机模型编程
- linux mysql 端口配置文件_linux虚拟机中各服务端口及配置文件路径
- python面试技巧和注意事项_Python 程序员面试须知须会的5个问题
- php软件开发--laravel框架
- 你不知道的javascript_你不知道的javascript(上)
- OSPF的网络类型特征总结
- assetbundle能不能删除_Addressable卸载单个资源的疑问
- Ubuntu系统日志分析
- 如何远程linux服务器桌面,LINUX操作系统如何远程登录桌面
- 获取某年的所有周日期
- 好用的函数在线绘图工具
- 【18】微信小程序:05-WePY简介、WePY的安装与运行、WePY文件介绍、WePY框架开发规范与使用
- Paul Graham:撼动硅谷的人(译文)
- 如何解决‘CommandNotFoundError: Your shell has not been properly configured to use ‘conda activate’错误
- 惠普暗影精灵4笔记本如何U盘重装系统教学
热门文章
- WIFI营销读书笔记之二:跑马圈地
- 编程常用单词1500个
- 凹凸贴图(Bump Map)实现原理以及与法线贴图(Normal Map)的区别
- 记工信部列入黑名单的域名释放后可以重新注册的jeeace.com使用记录
- 视觉SLAM十四讲笔记-第四讲 李群与李代数
- 室内定位技术之UWB篇
- 喜报|知道创宇ScanA入选华为云内容安全领域首家联营联运生态伙伴
- CQHTTP 以HTTP形式制作你的QQ机器人
- 计算机突然无法连接网络,win7电脑突然不能上网的四种解决方案
- Either your server has no Maven installations defined, or the requested Maven version does not exist