赞
踩
2D贴图绘制方式有两种,第一种由 GUI 绘制,第二种是将贴图以材质的形式绘制在游戏对象中。
在屏幕中绘制一张静态贴图,需要使用 GUI.DrawTexture() 方法,该方法原型如下:
GUI.DrawTexture(位置, 图片对象, 缩放模式, 是否开启图片混合模式, 图片缩放宽高比);
例如:GUI.DrawTexture(new Rect(100,100,120,120), texSingle, ScaleMode.StretchToFill, true, 0);
第一个参数表示图片绘制的区域,第二个参数表示绘制图片的对象,第三个参数表示图片缩放模式,第四个参数表示是否开启图片混合模式,第五个参数表示图片缩放宽高比。
分别读取单个图片与多个图片,并且将加载的图片绘制在屏幕当中。
一定要将加载的图片保存在“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);
- }
- }
-
- }
- }
运行结果:点击“加载一张贴图”按钮会显示上面那一张图,点击“加载一组图片”按钮会把指定文件夹的图片全部显示
帧动画绘制原理:首先需要一组帧动画资源,然后在屏幕中设定一个显示区域,接着将动画的每一帧图片按照固定的时间在这个区域顺序切换,实现动画的播放。
使用程序将动画资源存储在动画数组中,然后设定刷新时间,每次刷新动画时将在原有显示区域中绘制下一帧图片,到了最后一帧则从第一帧重新开始。
下图是“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;
- }
- }
-
- }
-
- }
运行结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。