贴图有可能是多行多列的一些图案组成的。当我们需要一帧,一帧的播放时候。也就是帧序列动画,

我们就需要用到tiling和offset两个属性,

默认图片的左下角为坐标圆点即:(0,0)

tiling是图片的大小,offset是偏移量

来看看一些例子:

  1. using UnityEngine;
  2. using System.Collections;
  3.  
  4. public class animspite : MonoBehaviour
  5. {
  6.  
  7. public int totolFrame;//总帧数,即多少帧
  8. public int fbs;//帧速度 即 1秒运行多少帧
  9. public int rowNumber; //几行
  10. public int colNumber; //几列
  11. public bool isDes = false; //是否播放一次就销毁对象
  12. // Use this for initialization
  13. void Start()
  14. {
  15. //判断当前平台
  16. #if UNITY_EDITOR
  17. Debug.Log("Unity Editor");
  18. #endif
  19.  
  20. #if UNITY_IPHONE
  21. Debug.Log("Iphone");
  22. #endif
  23.  
  24. #if UNITY_STANDALONE_OSX
  25. Debug.Log("Stand Alone OSX");
  26. #endif
  27.  
  28. #if UNITY_STANDALONE_WIN
  29. Debug.Log("Stand Alone Windows");
  30. #endif
  31. }
  32.  
  33. // Update is called once per frame
  34. void Update()
  35. {
  36. int index = (int)(Time.time * fbs);
  37.  
  38. index = index % totolFrame;
  39.  
  40. float sizeX = 1.0f / colNumber;
  41. float sizeY = 1.0f / rowNumber;
  42. Vector2 size = new Vector2(sizeX, sizeY);
  43.  
  44. float uIndex = index % colNumber;
  45. float vIndex = index / colNumber;
           //int vIndex = index % rowNumber;
  46.  
  47. float offsetX = uIndex * size.x;
  48. float offsetY = (1.0f - size.y) - (vIndex * size.y);
  49. //offsetY = 1.0f * vIndex / rowNumber;
  50.  
  51. Vector2 offset = new Vector2(offsetX, offsetY);
  52.  
  53. transform.renderer.material.mainTextureScale = size;
  54. transform.renderer.material.mainTextureOffset = offset;
  55.  
  56. if (isDes)
  57. {
  58. if (Time.time > )
  59. {
  60. Destroy(this.gameObject);
  61. }
  62. }
  63. }
  64. }
  1.  
  1. //--------------更直观的分割线----------------------
  2. int currentFame = (int)(Time.time * fbs); //算出当前帧
          if (assing != 0) currentFame = assing;//当指定assing值时,即只播放指定帧的动画
  3. Vector2 size = new Vector2(); //算出当前帧,图片的坐标
  4. size.x = 1.0f / colNumber;
  5. size.y = 1.0f / rowNumber;
  6.  
  7. //算出当前帧,图片分别在x。y轴上的坐标
  8. float xFrame = currentFame % colNumber;
  9. float yFrmae = currentFame / colNumber;
  10.  
  11. Vector2 offset = new Vector2(); //算出当前帧,图片的偏移量
  12. offset.x = xFrame * size.x;
  13. offset.y = 1.0f - size.y - (yFrmae * size.y);
  14.  
  15. //赋值
  16. transform.renderer.material.mainTextureScale = size;
  17. transform.renderer.material.mainTextureOffset = offset;
  1.  
  1. /*参考自网络*/
  2. public int rowCount = ; //图片的中帧图片的行数
  3. public int colCount = ; //图片的中帧图片的列数
  4. public int rowStart = ; //开始播放的行下标
  5. public int colStart = ; //开始播放的列下标
  6. public int totalCells = ; //帧图片的总数
  7. public int fps = ; //播放速度
  8. //Update
  9. void Update()
  10. {
  11. SetSpriteAnimation(colCount, rowCount, rowStart, colStart, totalCells, fps);
  12. }
  13.  
  14. //SetSpriteAnimation
  15. void SetSpriteAnimation(int colCount, int rowCount, int rowStart, int colStart, int totalCells, int fps)
  16. {
  17. //因为Time.time的为游戏运行的时间,所以index=1,2,3,4...
  18. int index = (int)(Time.time * fps);
  19. index = index % totalCells;
  20. float sizeX = 1.0f / colCount;
  21. float sizeY = 1.0f / rowCount;
  22. Vector2 size = new Vector2(sizeX, sizeY);
  23. var uIndex = index % colCount;
  24. var vIndex = index / colCount;
  25. float offsetX = (uIndex + colStart) * size.x;
  26. //V轴位于图片的下方,因此V要翻转下
  27. float offsetY = (1.0f - size.y) - (vIndex + rowStart) * size.y;
  28. Vector2 offset = new Vector2(offsetX, offsetY);
  29. renderer.material.SetTextureOffset("_MainTex", offset);
  30. renderer.material.SetTextureScale("_MainTex", size);
  31. }
  1.  

unity3D中 material中tiling和offset属性解释的更多相关文章

  1. 图文详解Unity3D中Material的Tiling和Offset是怎么回事

    图文详解Unity3D中Material的Tiling和Offset是怎么回事 Tiling和Offset概述 Tiling表示UV坐标的缩放倍数,Offset表示UV坐标的起始位置. 这样说当然是隔 ...

  2. TDD在Unity3D游戏项目开发中的实践

    0x00 前言 关于TDD测试驱动开发的文章已经有很多了,但是在游戏开发尤其是使用Unity3D开发游戏时,却听不到特别多关于TDD的声音.那么本文就来简单聊一聊TDD如何在U3D项目中使用以及如何使 ...

  3. Thinking in Unity3D:渲染管线中的Rendering Path

      关于<Thinking in Unity3D> 笔者在研究和使用Unity3D的过程中,获得了一些Unity3D方面的信息,同时也感叹Unity3D设计之精妙.不得不说,笔者最近几年的 ...

  4. html5中新增的form表单属性

    html5中新增两个表单属性,分别autocomplete和novalidate属性 1.autocomplete属性 该属性用于控制自动完成功能的开启和关闭.可以设置表单或者input元素,有两个属 ...

  5. 要将 ASP.NET 访问权限授予某个文件,请在资源管理器中右击该文件,选择“属性”,然后选择“安全”选项卡。单击“添加”添加适当的用户或组。突出显示 ASP.NET 帐户,选中所需访问权限对应的框。

    找到该文件所在文件夹,右键属性,安全选项卡,添加-aspnet用户,并设置其权限为完全控制.如果还是不行,就添加一个Everyone用户并赋予完全控制权限windows server 2008中IIS ...

  6. javascript中元素的scrollLeft和scrollTop属性说明

    再说意义之前,前说一下这两个属性的适用范围: 注意:这两个属性只能用于元素设置了overflow的css样式中.否者这两个属性没有任何意义.且overflow的值不能为visible,但可以为hidd ...

  7. css中的字体及文本相关属性

    css中的字体及文本相关属性 1.字体相关属性 字体主要可以设置color.font-family.font-size.font-size-adjust.font-stretch.font-style ...

  8. C#winform中使用控件的Dock属性进行布局

    想要实现如下布局,可以通过设置控件的Dock属性达到效果 1.拖放一个panel控件一个label控件(放在panel中)和一个treeView控件到TestForm中 2.设置panel的Dock属 ...

  9. Objective-C中变量采用@property的各个属性值的含义

    我们在OC中定义变量,可以自己来定义变量的setter方法来设置变量值,用getter方法来获取变量值.但是当变量数量增多时,还采用手动添加setter/getter方法来操作变量,就会使得程序代码量 ...

随机推荐

  1. vue 项目里正确地引用 jquery

    一.NPM安装的jQuery 使用vue-cli构建的vue项目,需要修改的是build/webpack.base.conf.js 1.添加引入webpack,后面的plugins那里需要 const ...

  2. C# 日志系统 log4net 配置及使用

    1.引用Dll 版本是:1.2.10.0,下载Dll 2.Web.config文件配置 <?xml version="1.0" encoding="utf-8&qu ...

  3. Notepad++如何关闭最近打开的文件的历史记录功能

    Notepad++是Windows 操作系统下的一套非常有特色的自由软件的纯文字编辑器(许可证:GPL),有完整的中文化接口及支持多国语言编写的 功能(UTF8 技术).它的功能比Windows中的N ...

  4. 【CF888G】Xor-MST Trie树(模拟最小生成树)

    [CF888G]Xor-MST 题意:给你一张n个点的完全图,每个点有一个权值ai,i到j的边权使ai^aj,求这张图的最小生成树. n<=200000,ai<2^30 题解:学到了求最小 ...

  5. Unity3D NGUI 二 NGUI Button怎样接受用户点击并调用函数,具体方法名称是什么

    a.直接监听事件 把下面脚本直接绑定在按钮上,当按钮点击时就可以监听到,这种方法不太好很不灵活. void OnClick(){ Debug.Log("Button is Click!!!& ...

  6. Ubuntu 16.04系统下apt-get和dpkg区别

    两者的区别是dpkg绕过apt包管理数据库对软件包进行操作,所以你用dpkg安装过的软件包用apt可以再安装一遍,系统不知道之前安装过了,将会覆盖之前dpkg的安装.1.dpkg是用来安装.deb文件 ...

  7. yii---实现加一或减一

    废话少说,直接看: /** * 添加帖子的浏览数 * @author fyz */ public function addViewNum($threadId){ $list = ForumThread ...

  8. Linux下 磁盘扩容的两种方式

    Hadoop扩容 概述 Hadoop存储容量或计算能力不能满足日益增长的需求时,就需要扩容. 扩容有两个方案: 1) 增加磁盘 2) 增加节点 方案一:扩大虚拟磁盘 扩大容量 将虚拟的Linux关闭, ...

  9. [No00004F]史上最全Vim快捷键键位图(入门到进阶)vim常用命令总结

    在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行.你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的code format.使 ...

  10. ArcGIS API for javascript开发笔记(三)——解决打印输出的中文为乱码问题

    感谢一路走来默默支持和陪伴的你~~~ ----------------------欢迎来访,拒绝转载---------------------- 1.      调用ArcGIS API的Print实 ...