当前位置:   article > 正文

Unity3D 2D贴图 与 帧动画_unity中绘制贴图的方法是gui什么?

unity中绘制贴图的方法是gui什么?

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文件夹或者文件中的所有资源。

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class toPictrue : MonoBehaviour {
  5. private Texture2D tex; //贴图
  6. private Object[] texs; //贴图数组
  7. void OnGUI()
  8. {
  9. if(GUI.Button(new Rect(10,10,100,50),"加载一张贴图"))
  10. {
  11. if(tex == null)
  12. {
  13. //加载一张贴图
  14. tex = (Texture2D)Resources.Load("single/0");
  15. }
  16. }
  17. if(GUI.Button(new Rect(10,160,100,50),"加载一组图片"))
  18. {
  19. if(texs == null)
  20. {
  21. //加载一组贴图
  22. texs = Resources.LoadAll("textures");
  23. }
  24. }
  25. if(tex != null)
  26. {
  27. //绘制贴图
  28. GUI.DrawTexture(new Rect(110,10,120,120),tex,ScaleMode.StretchToFill,true,0);
  29. }
  30. if(texs != null)
  31. {
  32. for(var i = 0;i<texs.Length;i++)
  33. {
  34. GUI.DrawTexture(new Rect(110+i*120,160,120,120),(Texture)texs[i],ScaleMode.StretchToFill,true,0);
  35. }
  36. }
  37. }
  38. }

运行结果:点击“加载一张贴图”按钮会显示上面那一张图,点击“加载一组图片”按钮会把指定文件夹的图片全部显示

 

绘制动画

帧动画绘制原理:首先需要一组帧动画资源,然后在屏幕中设定一个显示区域,接着将动画的每一帧图片按照固定的时间在这个区域顺序切换,实现动画的播放。

使用程序将动画资源存储在动画数组中,然后设定刷新时间,每次刷新动画时将在原有显示区域中绘制下一帧图片,到了最后一帧则从第一帧重新开始。

示例2

下图是“Assets”文件夹里的资源。

人物行走循环动画已经在屏幕中播放,并且播放帧数的序列号以标签的形式绘制在屏幕中

示例中,将播放动画的功能封装在 DrawAnimation() 方法中,该方法第一个参数表示动画资源数组对象,第二个参数表示动画的显示区域。

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class E3_06 : MonoBehaviour {
  5. private Object[] anim; //动画数组
  6. private int nowFram; //帧序列
  7. private int mFrameCount; //动画帧的总数
  8. private float fps = 5; //限制一秒多少帧
  9. private float time = 0; //限制帧的时间
  10. void Start () {
  11. //得到帧动画中的所有图片资源
  12. anim = Resources.LoadAll("WalkingCartoons");
  13. //得到该动画共有多少帧
  14. mFrameCount = anim.Length;
  15. }
  16. void OnGUI()
  17. {
  18. //绘制帧动画
  19. DrawAnimation(anim, new Rect(50, 80, 32, 48));
  20. }
  21. void DrawAnimation(Object[] tex,Rect rect)
  22. {
  23. //绘制动画信息
  24. GUILayout.Label("当前动画播放:第"+nowFram+"帧");
  25. //绘制当前帧
  26. GUI.DrawTexture(rect,(Texture)tex[nowFram],ScaleMode.StretchToFill,true,0);
  27. //计算限制时间
  28. time += Time.deltaTime;
  29. //超过限制帧则切换图片
  30. if(time >= 1.0 / fps)
  31. {
  32. nowFram++; //帧序列切换
  33. time = 0; //限制帧清空
  34. if(nowFram >= mFrameCount)
  35. {
  36. nowFram = 0;
  37. }
  38. }
  39. }
  40. }

运行结果:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/122486
推荐阅读
相关标签
  

闽ICP备14008679号