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贴图 与 帧动画相关推荐

  1. unity 2D游戏开发 制作帧动画的两种方法

    本小主在这里给大家分享一下unity 2D游戏开发中制作帧动画的两种方法. 比较简单,一学即会. 方法一: 是用代码控制: 先创建一个2D工程.导入图片资源,并设置texture的texture ty ...

  2. 定位、锚点、精灵图、帧动画详解

    1.定位 1.定位 position 说法 文档流 偏移位置(top left right bottom)时候的参照物 1.position:static; 默认值 默认值 默认 2.position ...

  3. 【腾讯优测干货分享】使用多张图片做帧动画的性能优化

    本文来自于Dev Club 开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57fc8cea302e4725036142f6 使用多张图片做帧动画的性能优 ...

  4. 解放生产力,CSS3帧动画工具

    由于CSS效果中用到帧动画时,设计师制作过程中合图过程繁琐,一旦改变动画,需要重新合图: 动画百分比+图片位置计算繁琐,加减动画的帧数需要重新计算: 沟通成本高,有时候设计师发现输出的动画跟在AE看到 ...

  5. 使用多张图片做帧动画的性能优化

    背景 QQ群的送礼物功能需要加载几十张图然后做帧动画,但是多张图片加载造成了非常大的性能开销,导致图片开始加载到真正播放动画的时间间隔比较长.所以需要研究一些优化方案提升加载图片和帧动画的性能. 原理 ...

  6. java如何运用多帧图片_【腾讯优测干货分享】使用多张图片做帧动画的性能优化...

    使用多张图片做帧动画的性能优化 背景 QQ群的送礼物功能需要加载几十张图然后做帧动画,但是多张图片加载造成了非常大的性能开销,导致图片开始加载到真正播放动画的时间间隔比较长.所以需要研究一些优化方案提 ...

  7. 【腾讯优测干货分享】使用多张图片做帧动画的性能优化 1

    本文来自于Dev Club 开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57fc8... 使用多张图片做帧动画的性能优化 背景 QQ群的送礼物功能需要 ...

  8. Unity3D游戏开发之使用Mecanim动画系统控制2D动画

    各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是http://blog.csdn.net/qinyuanpei.博主今天想和大家分享的是在Unity3D中使用Mecanim动画系统来 ...

  9. 第六章 DirectX 2D游戏和帧动画(上)

    目前,我们已经掌握了如何使用DirectX绘制四边形,纹理映射技术,以及正交摄像机的内容.对于2D游戏的开发,这些内容基本上已经足够了.2D游戏的本质就是图像游戏,2D游戏中的动画其实就是一系列连续动 ...

  10. 鸿蒙开发-新建Ability与使用image-animator实现图帧动画

    场景 鸿蒙开发-基础组件介绍及chart组件使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/118333539 在上面学习了 ...

最新文章

  1. Waymo十周年:多尔戈夫讲述从被嘲笑到硕果累累
  2. redis单线程为何快
  3. 《物联网框架ServerSuperIO教程》- 23.动态数据接口增加缓存,提高数据输出到OPCServer和(实时)数据库的效率...
  4. mysql locking_Mysql next-key locking,读锁,写锁
  5. 云计算底层技术-虚拟网络设备(Bridge,VLAN)
  6. 开源压缩算法brotli_Google的Brotli压缩算法,C ++核心准则以及更多新闻
  7. 动画片动漫迷<未来的未来>高清图片壁纸
  8. 矩池云利用ipykernel为JupyterLab添加kernel以及展示出来
  9. Softmax Derivation
  10. Mac电脑上非常好用的英汉互译词典软件
  11. vue前台导出zip文件_在vue.js中使用JSZip实现在前端解压文件的方法
  12. 用于查询当前数据库中所有表格的记录条数的脚本
  13. 万万没想到一个普通的地区问题,竟然让我们大战了300回合
  14. 51单片机c语言烧录软件,51单片机烧写程序的方法
  15. maven配置时报错NB: JAVA_HOME should point to a JDK not a JRE**解决方法
  16. Nature|人类肠道细菌对治疗药物的生物累积
  17. 【历史上的今天】11 月 8 日:为开源献身的互联网之子;卷积神经网络 LeNet-5 问世;特斯拉发明遥控器
  18. json模块错误:Expecting value: line 1 column 1 (char 0)
  19. java全角数字_Java全角、半角字符的关系以及转换
  20. UbuntuX11VNC教程

热门文章

  1. python表格绘制斜线表头_【Excel系列05】表格中如何制作斜线表头
  2. 计算机公式mode,强大的 Org mode(3): 表格的基本操作及公式、绘图 · ZMonster's Blog...
  3. java u0000_Java-从字符串中删除\ u0000
  4. AMS1117稳压芯片介绍
  5. java随机取名_中文名字随机生成器
  6. android触摸 apk,超级触控(流畅触屏)apk
  7. 汇丰银行的华尔街恐怖故事
  8. 利用手机距离感应器来切换扬声器和听筒播放
  9. html中颜色取样器工具,photoshop基础教程:颜色取样器工具的使用详解
  10. 微型计算机常用的输入设备分别是,微型计算机常见的基本输入输出设备有哪些?...