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;
            }
        }
        
    }
	
}

运行结果:

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

healthLau

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值