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

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

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

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

来看看一些例子:

 using UnityEngine;
using System.Collections; public class animspite : MonoBehaviour
{ public int totolFrame;//总帧数,即多少帧
public int fbs;//帧速度 即 1秒运行多少帧
public int rowNumber; //几行
public int colNumber; //几列
public bool isDes = false; //是否播放一次就销毁对象
// Use this for initialization
void Start()
{
//判断当前平台
#if UNITY_EDITOR
Debug.Log("Unity Editor");
#endif #if UNITY_IPHONE
Debug.Log("Iphone");
#endif #if UNITY_STANDALONE_OSX
Debug.Log("Stand Alone OSX");
#endif #if UNITY_STANDALONE_WIN
Debug.Log("Stand Alone Windows");
#endif
} // Update is called once per frame
void Update()
{
int index = (int)(Time.time * fbs); index = index % totolFrame; float sizeX = 1.0f / colNumber;
float sizeY = 1.0f / rowNumber;
Vector2 size = new Vector2(sizeX, sizeY); float uIndex = index % colNumber;
float vIndex = index / colNumber;
       //int vIndex = index % rowNumber; float offsetX = uIndex * size.x;
float offsetY = (1.0f - size.y) - (vIndex * size.y);
//offsetY = 1.0f * vIndex / rowNumber; Vector2 offset = new Vector2(offsetX, offsetY); transform.renderer.material.mainTextureScale = size;
transform.renderer.material.mainTextureOffset = offset; if (isDes)
{
if (Time.time > )
{
Destroy(this.gameObject);
}
}
}
}

  //--------------更直观的分割线----------------------
int currentFame = (int)(Time.time * fbs); //算出当前帧
      if (assing != 0) currentFame = assing;//当指定assing值时,即只播放指定帧的动画
Vector2 size = new Vector2(); //算出当前帧,图片的坐标
size.x = 1.0f / colNumber;
size.y = 1.0f / rowNumber; //算出当前帧,图片分别在x。y轴上的坐标
float xFrame = currentFame % colNumber;
float yFrmae = currentFame / colNumber; Vector2 offset = new Vector2(); //算出当前帧,图片的偏移量
offset.x = xFrame * size.x;
offset.y = 1.0f - size.y - (yFrmae * size.y); //赋值
transform.renderer.material.mainTextureScale = size;
transform.renderer.material.mainTextureOffset = offset;

 /*参考自网络*/
public int rowCount = ; //图片的中帧图片的行数
public int colCount = ; //图片的中帧图片的列数
public int rowStart = ; //开始播放的行下标
public int colStart = ; //开始播放的列下标
public int totalCells = ; //帧图片的总数
public int fps = ; //播放速度
//Update
void Update()
{
SetSpriteAnimation(colCount, rowCount, rowStart, colStart, totalCells, fps);
} //SetSpriteAnimation
void SetSpriteAnimation(int colCount, int rowCount, int rowStart, int colStart, int totalCells, int fps)
{
//因为Time.time的为游戏运行的时间,所以index=1,2,3,4...
int index = (int)(Time.time * fps);
index = index % totalCells;
float sizeX = 1.0f / colCount;
float sizeY = 1.0f / rowCount;
Vector2 size = new Vector2(sizeX, sizeY);
var uIndex = index % colCount;
var vIndex = index / colCount;
float offsetX = (uIndex + colStart) * size.x;
//V轴位于图片的下方,因此V要翻转下
float offsetY = (1.0f - size.y) - (vIndex + rowStart) * size.y;
Vector2 offset = new Vector2(offsetX, offsetY);
renderer.material.SetTextureOffset("_MainTex", offset);
renderer.material.SetTextureScale("_MainTex", size);
}

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. Elasticsearch学习之深入搜索一 --- 提高查询的精准度

    1. 为帖子增加标题字段 POST /forum/article/_bulk { "} } { "doc" : {"title" : "th ...

  2. 基于Python的跨平台端口转发工具

    背景 使用lcx也好,nc也好,总是会被安全防护软件查杀,所以想着自己写一个.顺面学习一下,端口转发的原理. 端口转发的逻辑 端口转发的逻辑很简单开启两个scoket,一个绑定IP端口进行listen ...

  3. Unity3D笔记 愤怒的小鸟<三> 实现Play界面2

    前言:在Play页面中给Play页面添加一个“开始游戏”和“退出游戏”按钮顺便再来一个背景音乐 添加按钮可以是GUI.Button(),也可以是GUILayout.Button():给图片添加按钮可以 ...

  4. HTML表单的运用

    没学习HTML表单之前,觉得文本框.密码框.隐藏域.单选按钮.复选框等这些在平常页面常见到的表单不起眼,挺简单,到自己用代码区实现将它们灵活串联运用起来,才发现一点都不简单.看着容易,自己操作还是出现 ...

  5. Java String, StringBuffer和StringBuilder实例

    1- 分层继承2- 可变和不可变的概念3- String3.1- 字符串是一个非常特殊的类3.2- String 字面值 vs. String对象3.3- String的方法3.3.1- length ...

  6. 【转】C#线程篇

    C# 温故而知新: 线程篇(一) C# 温故而知新: 线程篇(二) C# 温故而知新:线程篇(三) C# 温故而知新: 线程篇(四)

  7. hadoop(角色)各个组件配置信息

    1)namenode:        core-site.xml文件中决定:            <property>                <name>fs.def ...

  8. bit 32/64

    [asm]64位编译32位汇编需要注意的   汇编语言在32位和64位下有区别    32位的汇编在代码前增加.code32    as可以通过--32指定生成32位汇编 在64位系统下ld链接生成3 ...

  9. abi-api, arm target triplet https://en.wikipedia.org/wiki/ARM_architecture

    GNU软件用target triplet来描述工作平台,target triplet是一种规范化的名称,形如cpu-vendor-os(where os can be ‘system’ or ‘ker ...

  10. mysql数据库的相关练习题及答案

    表结构示意图: 表结构创建语句: class表创建语句 create table ) not null)engine=innodb default charset=utf8; student表创建语句 ...