Unity3D 2D贴图 与 帧动画
2D贴图绘制方式有两种,第一种由 GUI 绘制,第二种是将贴图以材质的形式绘制在游戏对象中。
GUI绘制
在屏幕中绘制一张静态贴图,需要使用 GUI.DrawTexture() 方法,该方法原型如下:
GUI.DrawTexture(位置, 图片对象, 缩放模式, 是否开启图片混合模式, 图片缩放宽高比);
例如:GUI.DrawTexture(new Rect(100,100,120,120), texSingle, ScaleMode.StretchToFill, true, 0);
第一个参数表示图片绘制的区域,第二个参数表示绘制图片的对象,第三个参数表示图片缩放模式,第四个参数表示是否开启图片混合模式,第五个参数表示图片缩放宽高比。
示例1
分别读取单个图片与多个图片,并且将加载的图片绘制在屏幕当中。
一定要将加载的图片保存在“Assets”下的“Resources”文件夹(自己创建一个)中,否则的话程序将无法识别。
其中 Resource.Load()方法 和 Resource.LoadAll()方法的参数均为资源文件夹的完整路径,但是前者返回的是读取的资源对象,后者返回的是资源数组对象。
两者读取的都是“Resources”文件夹的对象
Resources.Load(string path) ; //加载储存在Resources文件夹中path处的资源,加载单一的贴图资源。
Resources.Load(string path ,Type type) ; //加载储存在Resources文件夹中path处的资源,只返回type的物体。
Resources.LoadAll(string path) ; //加载Resources文件夹中的path文件夹或者文件中的所有资源。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class toPictrue : MonoBehaviour {private Texture2D tex; //贴图private Object[] texs; //贴图数组void OnGUI(){if(GUI.Button(new Rect(10,10,100,50),"加载一张贴图")){if(tex == null){//加载一张贴图tex = (Texture2D)Resources.Load("single/0");}}if(GUI.Button(new Rect(10,160,100,50),"加载一组图片")){if(texs == null){//加载一组贴图texs = Resources.LoadAll("textures");}}if(tex != null){//绘制贴图GUI.DrawTexture(new Rect(110,10,120,120),tex,ScaleMode.StretchToFill,true,0);}if(texs != null){for(var i = 0;i<texs.Length;i++){GUI.DrawTexture(new Rect(110+i*120,160,120,120),(Texture)texs[i],ScaleMode.StretchToFill,true,0);}}}
}
运行结果:点击“加载一张贴图”按钮会显示上面那一张图,点击“加载一组图片”按钮会把指定文件夹的图片全部显示
绘制动画
帧动画绘制原理:首先需要一组帧动画资源,然后在屏幕中设定一个显示区域,接着将动画的每一帧图片按照固定的时间在这个区域顺序切换,实现动画的播放。
使用程序将动画资源存储在动画数组中,然后设定刷新时间,每次刷新动画时将在原有显示区域中绘制下一帧图片,到了最后一帧则从第一帧重新开始。
示例2
下图是“Assets”文件夹里的资源。
人物行走循环动画已经在屏幕中播放,并且播放帧数的序列号以标签的形式绘制在屏幕中
示例中,将播放动画的功能封装在 DrawAnimation() 方法中,该方法第一个参数表示动画资源数组对象,第二个参数表示动画的显示区域。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class E3_06 : MonoBehaviour {private Object[] anim; //动画数组private int nowFram; //帧序列private int mFrameCount; //动画帧的总数private float fps = 5; //限制一秒多少帧private float time = 0; //限制帧的时间void Start () {//得到帧动画中的所有图片资源anim = Resources.LoadAll("WalkingCartoons");//得到该动画共有多少帧mFrameCount = anim.Length;}void OnGUI(){//绘制帧动画DrawAnimation(anim, new Rect(50, 80, 32, 48));}void DrawAnimation(Object[] tex,Rect rect){//绘制动画信息GUILayout.Label("当前动画播放:第"+nowFram+"帧");//绘制当前帧GUI.DrawTexture(rect,(Texture)tex[nowFram],ScaleMode.StretchToFill,true,0);//计算限制时间time += Time.deltaTime;//超过限制帧则切换图片if(time >= 1.0 / fps){nowFram++; //帧序列切换time = 0; //限制帧清空if(nowFram >= mFrameCount){nowFram = 0;}}}}
运行结果:
Unity3D 2D贴图 与 帧动画相关推荐
- unity 2D游戏开发 制作帧动画的两种方法
本小主在这里给大家分享一下unity 2D游戏开发中制作帧动画的两种方法. 比较简单,一学即会. 方法一: 是用代码控制: 先创建一个2D工程.导入图片资源,并设置texture的texture ty ...
- 定位、锚点、精灵图、帧动画详解
1.定位 1.定位 position 说法 文档流 偏移位置(top left right bottom)时候的参照物 1.position:static; 默认值 默认值 默认 2.position ...
- 【腾讯优测干货分享】使用多张图片做帧动画的性能优化
本文来自于Dev Club 开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57fc8cea302e4725036142f6 使用多张图片做帧动画的性能优 ...
- 解放生产力,CSS3帧动画工具
由于CSS效果中用到帧动画时,设计师制作过程中合图过程繁琐,一旦改变动画,需要重新合图: 动画百分比+图片位置计算繁琐,加减动画的帧数需要重新计算: 沟通成本高,有时候设计师发现输出的动画跟在AE看到 ...
- 使用多张图片做帧动画的性能优化
背景 QQ群的送礼物功能需要加载几十张图然后做帧动画,但是多张图片加载造成了非常大的性能开销,导致图片开始加载到真正播放动画的时间间隔比较长.所以需要研究一些优化方案提升加载图片和帧动画的性能. 原理 ...
- java如何运用多帧图片_【腾讯优测干货分享】使用多张图片做帧动画的性能优化...
使用多张图片做帧动画的性能优化 背景 QQ群的送礼物功能需要加载几十张图然后做帧动画,但是多张图片加载造成了非常大的性能开销,导致图片开始加载到真正播放动画的时间间隔比较长.所以需要研究一些优化方案提 ...
- 【腾讯优测干货分享】使用多张图片做帧动画的性能优化 1
本文来自于Dev Club 开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57fc8... 使用多张图片做帧动画的性能优化 背景 QQ群的送礼物功能需要 ...
- Unity3D游戏开发之使用Mecanim动画系统控制2D动画
各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是http://blog.csdn.net/qinyuanpei.博主今天想和大家分享的是在Unity3D中使用Mecanim动画系统来 ...
- 第六章 DirectX 2D游戏和帧动画(上)
目前,我们已经掌握了如何使用DirectX绘制四边形,纹理映射技术,以及正交摄像机的内容.对于2D游戏的开发,这些内容基本上已经足够了.2D游戏的本质就是图像游戏,2D游戏中的动画其实就是一系列连续动 ...
- 鸿蒙开发-新建Ability与使用image-animator实现图帧动画
场景 鸿蒙开发-基础组件介绍及chart组件使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/118333539 在上面学习了 ...
最新文章
- Waymo十周年:多尔戈夫讲述从被嘲笑到硕果累累
- redis单线程为何快
- 《物联网框架ServerSuperIO教程》- 23.动态数据接口增加缓存,提高数据输出到OPCServer和(实时)数据库的效率...
- mysql locking_Mysql next-key locking,读锁,写锁
- 云计算底层技术-虚拟网络设备(Bridge,VLAN)
- 开源压缩算法brotli_Google的Brotli压缩算法,C ++核心准则以及更多新闻
- 动画片动漫迷<未来的未来>高清图片壁纸
- 矩池云利用ipykernel为JupyterLab添加kernel以及展示出来
- Softmax Derivation
- Mac电脑上非常好用的英汉互译词典软件
- vue前台导出zip文件_在vue.js中使用JSZip实现在前端解压文件的方法
- 用于查询当前数据库中所有表格的记录条数的脚本
- 万万没想到一个普通的地区问题,竟然让我们大战了300回合
- 51单片机c语言烧录软件,51单片机烧写程序的方法
- maven配置时报错NB: JAVA_HOME should point to a JDK not a JRE**解决方法
- Nature|人类肠道细菌对治疗药物的生物累积
- 【历史上的今天】11 月 8 日:为开源献身的互联网之子;卷积神经网络 LeNet-5 问世;特斯拉发明遥控器
- json模块错误:Expecting value: line 1 column 1 (char 0)
- java全角数字_Java全角、半角字符的关系以及转换
- UbuntuX11VNC教程
热门文章
- python表格绘制斜线表头_【Excel系列05】表格中如何制作斜线表头
- 计算机公式mode,强大的 Org mode(3): 表格的基本操作及公式、绘图 · ZMonster's Blog...
- java u0000_Java-从字符串中删除\ u0000
- AMS1117稳压芯片介绍
- java随机取名_中文名字随机生成器
- android触摸 apk,超级触控(流畅触屏)apk
- 汇丰银行的华尔街恐怖故事
- 利用手机距离感应器来切换扬声器和听筒播放
- html中颜色取样器工具,photoshop基础教程:颜色取样器工具的使用详解
- 微型计算机常用的输入设备分别是,微型计算机常见的基本输入输出设备有哪些?...