NGUI_2.6.3_系列教程六(序列帧动画)
今天我给大家讲一下如何使用NGUI做序列帧动画。本节主要包括两方面内容,分别是使用UIspirit和使用UITexture 做序列帧动画。废话不说了,下面开始。
还要在啰嗦一句,首先大家要准备一些序列帧的素材图片,最好是大图和小图各一套。我们先来将使用UISpirit做序列帧动画,这个方法只适合使用小图。
在使用UISpirit 之前大家还要把准备好的序列帧图片做成Atlas,如何做Atlas,大家可以参考系列教程四,这里就不多说了。建好自己的Atlas之后就可以开始着手做了。废话终于完了。
1. 老规矩,新建一个场景,新建一个2D UI ,在Panel节点下新建一个UISpirit,图片选择序列帧的第一帧图片。
2.如何让Spirit动态换图片,是我们要解决的重要问题。只要UIspirit能够根据时间动态的换图片就可以做到播放序列帧动画。其实很简单,最重 要的就是UISpirit的Name属性。我们只要能够动态改变UISpirit的SpiritName,就可以实现动态换图的功能。
代码如下
public bool ActivateWait = false;
float fireRate = 0.2f;
int i = 0;
float nextFire;
string[] ActivatorTexture = new string[] { "activity00", "activity01", "activity02", "activity03", "activity04", "activity05", "activity06", "activity07", "activity08", "activity09", "activity10", "activity11" }; //这里存放我们需要调用的序列帧的名称,这种方法比较笨拙,
//只适合使用图片较少的情况,当图片很多的情况下,我们可以使用代码控制名称,思路是前面的名称一样,后面的名称代表序列帧编号,我们只要
//在代码中根据编号加上前缀名称就可以得到所需序列帧的全名。具体使用参见下面的Texture序列帧动画。
void Awake()
{
this.GetComponent<UISprite>().enabled = false;
}
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
if (ActivateWait)
{
this.GetComponent<UISprite>().enabled = true;
if (i < ActivatorTexture.Length)
{
if (Time.time > nextFire)
{
nextFire = Time.time + fireRate;
this.GetComponent<UISprite>().spriteName= ActivatorTexture;
i++;
}
}
else
{
i = 0;
}
}
else
{
this.GetComponent<UISprite>().enabled = false;
}
}
这里重要的代码其实就只有一句 this.GetComponent<UISprite>().spriteName= ActivatorTexture; 根据i的索引,动态的改变Spirit的名称。
其余的是控制播放序列帧的节奏和是否播放序列帧。如图是我使用此方法做的等待的进度条效果。
3.第二种方法,使用UITexture做序列帧动画。新建一个UITexture,拖放需要做动画的序列帧的第一帧到Texture槽中,关于它的参 数,在以前的系列教程中都已经解释的很清楚了,大家可以参考以前的教程。使用UITexture做序列帧动画的关键在于动态改变它的Texture。关键 代码:UITexture.mainTexture 。
这里说明一点就是使用该方法做序列帧动画之前,需要把所有的序列帧图片放到Resources目录下。我们在运行的时候动态调用需要的Texture。还 有一点需要注意的是,当图片很多的时候,我们还需要动态卸载已经加载的图片资源,避免挤爆内存。使用的方法是 : Resources.UnloadUnusedAssets();
4.有了上面的知识之后,我们就可以动手写出下面的代码了:
void DynamicLoadUnload(int curframe )
{
//plane.renderer.material.mainTexture=ani[currentFrame];
if (curframe < 10) //这里判断当前帧
{
TextureUI.mainTexture = (Texture2D)Resources.Load(SequenceName_Gewei + curframe.ToString(), typeof(Texture2D));
//SequenceName_Gewei 是指序列帧的名称去掉各位数字的名称,比如全名为Texture00,那么这里的参数应该是Texture0。下面还有十位百位,
//依次类推。这里是根据名称加帧索引,获取全名的。
}
else if (curframe >= 10 && curframe < 100)
{
if (curframe % 50 == 0)
Resources.UnloadUnusedAssets();
TextureUI.mainTexture = (Texture2D)Resources.Load(SequenceName_Shiwei + curframe.ToString(), typeof(Texture2D));
}
else
{
if (curframe % 50 == 0)
Resources.UnloadUnusedAssets();
TextureUI.mainTexture = (Texture2D)Resources.Load(SequenceName_Baiwei + curframe.ToString(), typeof(Texture2D));
}
}
需要大家跟着自己动手做,自己学,授之以鱼不如授之以渔。大家可以试着自己结合上面的UISpirit的方法先自己写一下看看。这样可以让大家根据学习内容多思考,自己写出的东西才能记得牢固。不要只简单的从网上下载现成的代码用,这样对学习没好处。
NGUI_2.6.3_系列教程六(序列帧动画)相关推荐
- NGUI_2.6.3_系列教程三
接下来我们再来看Progress Bar和Slider,对比参数我们可以发现,Progress Bar和slider的明显区别在于slider多一个Thumb选项,这里的Thumb就是我们拖动的时候点 ...
- NGUI_2.6.3_系列教程二
接下来我们创建一个Label,NGUIàOpen the Widget Wizard,打开widgetTool对话框,在Template中选择Label,确定AddTo右侧选项为panel,点击,Ad ...
- [转]Android Studio系列教程六--Gradle多渠道打包
转自:http://www.stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/ Android Studio系列教程六--Grad ...
- 以太坊构建DApps系列教程(六):使用定制代币进行投票
在本系列关于使用以太坊构建DApps教程的第5部分中,我们讨论了如何为Story添加内容,查看如何添加参与者从DAO购买代币的功能以及在Story中添加提交内容.现在是编写DAO最终形式的时候了:投票 ...
- 米思齐(Mixly)图形化系列教程(六)-for循环
目录 For执行过程 省略 省略'循环变量赋值' 省略'循环条件' 省略"循环变量增量" FOR循环使用举例 遍历数组 顺序输出数据 指定程序重复执行次数 死循环 求和 教程导航 ...
- PVE系列教程(六)、安装Windows11系统(专业版、企业版、家庭版通用)
为了更好的浏览体验,欢迎光顾勤奋的凯尔森同学个人博客 PVE系列教程(六).安装Windows11系统(专业版.企业版.家庭版通用) 一.创建win11的虚拟机,并设置参数 在PVE右上角点击创建虚拟 ...
- ClickHouse系列教程六:源码分析之Debug编译运行
ClickHouse系列教程: ClickHouse系列教程 根据官方文档的编译教程:How to Build ClickHouse on Linux - ClickHouse Documentati ...
- ASP.NET Core Web Razor Pages系列教程六:添加搜索功能
系列文章目录:系列教程:使用ASP.NET Core创建Razor Pages Web应用程序 - zhangpeterx的博客 系列教程代码的GitHub地址:ASP .Net Core Razor ...
- Redis系列教程(六):Redis缓存和MySQL数据一致性方案详解
需求起因 在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节.所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库. 这个业务场景,主要 ...
最新文章
- webpack --- [读书笔记] webpack中常用的一些配置项
- 分支限界法 tsp java_基于分支限界法的旅行商问题(TSP)一
- MyBatis-Plus_分页查询
- java 枚举 大小_Java枚举入门
- postgresql数据库导入导出
- 基于Heritrix+Lucene的搜索引擎构建(6)——搜索UI与结果页面
- 一段关于中国人口老龄化的评论
- bp神经网络模型拓扑结构,bp神经网络模型结构图
- Ensp实验随心记——帧中继
- 破解WEP密钥过程全解(上)
- 透明Png黑白图片上色(重新着色、改变成指定颜色)
- 计算机内存读取写入原理是什么
- 让理科生沉默,让文科生流泪的综合题详解
- python怎样算入门_python初学者怎么入门
- 量子计算 12 量子计算机到底是啥?
- 1013---IBM X3850 X6 重新构建Raid5---过程记录
- Python 每天定时运行某程序代码
- 马悦:《Linux内核分析》MOOC课程
- BG架构-kerberos初步学习
- android 背影模糊,Android透明背景的高斯模糊一点记录
热门文章
- python常用包有哪些品牌_python 常用包总结
- ant design pro模板_分享10 个开源免费且优秀的后台管理系统模板
- java中new与newitance_你真的弄明白 new 了吗
- unity2D人物和物体的碰撞设置
- 图像处理算法工程师——1必备技能总结——2面试题大全
- 西瓜书《支持向量机SVM》 原始形式推导+拉格朗日乘数法的SVM形式+SVM对偶形式推导+SMO算法推导
- too many connections的一个实践
- 吴恩达深度学习2.1练习_Improving Deep Neural Networks_initialization
- 创建XML文件以及XML中的节点和更新Xml文件中的节点的值
- 春运,一场共享发展的旅程