开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

教程分享

关注:559

当前位置:游戏蛮牛 技术专区 教程分享

查看: 321|回复: 7

[自学总结] UGUI 多张图片合成一张 记时 显示ICO

[复制链接]  [移动端链接]
4四处流浪
417/500
排名
7373
昨日变化
5

10

主题

94

帖子

417

积分

Rank: 4

UID
152229
好友
0
蛮牛币
1550
威望
0
注册时间
2016-6-16
在线时间
171 小时
最后登录
2017-1-20
发表于 2016-12-28 21:39:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
本帖最后由 wtujoxk 于 2016-12-29 09:59 编辑

如果没有生成图集的话,一般我在使用数字记数时都是用很多个Image组件来显示,
现在使用GetPixels32和SetPixels32将多张图片合并为一张,实测,十张60*90的图片,
合并成一张600*90的时间为2ms以内,还是非常快的,这样做的好处是不用生成图集,


来一张全家福

QQ图片20161228213114.png


再来个硬菜:
[C#] 纯文本查看 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;

///@brief
///文件名称: ImageTest
///功能描述:
///数据表:
///作者:YuXianQiang
///日期:#CreateTime#
///R1:
///修改作者:
///修改日期:
///修改理由:

namespace XianQiang.Yu
{
    public class ImagePicture : MonoBehaviour
    {
        void Start()
        {
            //加载图片
            Texture2D[] t = Resources.LoadAll<Texture2D>("Icos");

            //合成图片
            Texture2D tex = MergeImage(t);

            //生成后的图自适应大小
            GetComponent<RectTransform>().sizeDelta = new Vector2(tex.width, tex.height);

            //显示图片
            Sprite sp = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), new Vector2(0.5f, 0.5f));
            GetComponent<Image>().sprite = sp;
        }

        /// <summary>
        /// @brief 多张Texture2D合成一张Texture2D
        /// </summary>
        /// <param name="tex"></param>
        /// <returns></returns>
        public Texture2D MergeImage(Texture2D[] tex)
        {               
            //这里测试合成图片所花的时间
            //TimeSpan ts1 = new TimeSpan(DateTime.Now.Ticks);

            if (tex.Length == 0) return null;
            //定义新图的宽高
            int width = 0, height = 0;

            for (int i = 0; i < tex.Length; i++)
            {
                //Debug.Log(tex[i].ToString());
                //新图的宽度
                width += tex[i].width;
                if (i > 0)
                {
                    //新图的高度,这里筛选为最高
                    if (tex[i].height > tex[i - 1].height)
                        height = tex[i].height;
                }
                else height = tex[i].height; //只有一张图
            }

            //初始Texture2D
            Texture2D texture2D = new Texture2D(width, height);

            int x = 0, y = 0;
            for (int i = 0; i < tex.Length; i++)
            {
                //取图
                Color32[] color = tex[i].GetPixels32(0);

                //赋给新图
                if (i > 0) texture2D.SetPixels32(x += tex[i - 1].width, y, tex[i].width, tex[i].height, color);
                else texture2D.SetPixels32(x, y, tex[i].width, tex[i].height, color);
            }

            //应用
            texture2D.Apply();

            //TimeSpan ts2 = new TimeSpan(DateTime.Now.Ticks);
            //TimeSpan ts = ts2.Subtract(ts1).Duration();
            ////查看合成后的图所花时间 ms单位
            //Debug.Log(ts.TotalMilliseconds);

            return texture2D;
        }
    }
}



时间显示:
GIF.gif
代码:
[C#] 纯文本查看 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;

///@brief
///文件名称: UpdateTime
///功能描述:
///数据表:
///作者:YuXianQiang
///日期:#CreateTime#
///R1:
///修改作者:
///修改日期:
///修改理由:

namespace XianQiang.Yu
{
        public class UpdateTime : MonoBehaviour
        {
            public Texture2D[] img;
            private ImagePicture imgP;
            private string curTime;
            private string lastTime;
        void Start ()
        {
            imgP = GetComponent<ImagePicture>();
        }

            void Update()
            {
            curTime = DateTime.Now.ToString("hh:mm:ss");
            if (curTime != lastTime)//一秒更新一次
            {
                    lastTime = curTime;
                Texture2D tex = ShowTime();

                //生成后的图自适应大小
                GetComponent<RectTransform>().sizeDelta = new Vector2(tex.width, tex.height);

                //显示图片
                Sprite sp = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), new Vector2(0.5f, 0.5f));
                GetComponent<Image>().sprite = sp;
            }
            }
        Texture2D ShowTime()
            {
            Texture2D[] tex = new Texture2D[curTime.Length];

            for (int i = 0; i < curTime.Length; i++)
                {
                    string s = curTime.Substring(i, 1);
                    if (s == ":")
                        tex[i] = img[img.Length - 1];
                    else
                        tex[i] = img[Convert.ToInt32(s)];
                }
                return imgP.MergeImage(tex);
            }
        }
}


示例工程:
MergeImage.zip (34.66 KB, 下载次数: 14, 售价: 2 蛮牛币)

回复

使用道具 举报

5熟悉之中
529/1000
排名
23484
昨日变化
17

6

主题

324

帖子

529

积分

Rank: 5Rank: 5

UID
158776
好友
0
蛮牛币
59
威望
0
注册时间
2016-7-26
在线时间
193 小时
最后登录
2017-1-12
发表于 2016-12-29 08:38:07 | 显示全部楼层
谢谢楼主的分享

回复

使用道具 举报

6蛮牛粉丝
1037/1500
排名
6018
昨日变化
74

1

主题

714

帖子

1037

积分

Rank: 6Rank: 6Rank: 6

UID
182740
好友
0
蛮牛币
1020
威望
0
注册时间
2016-11-10
在线时间
186 小时
最后登录
2017-1-20
发表于 2016-12-29 08:38:21 | 显示全部楼层
谢谢分享!!!!!

回复

使用道具 举报

排名
42833
昨日变化
27

0

主题

7

帖子

9

积分

Rank: 1

UID
196955
好友
0
蛮牛币
1
威望
0
注册时间
2016-12-29
在线时间
0 小时
最后登录
2016-12-29
发表于 2016-12-29 09:41:10 | 显示全部楼层
6555555555555

回复

使用道具 举报

7日久生情
2606/5000
排名
71
昨日变化

10

主题

224

帖子

2606

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
11915
好友
4
蛮牛币
2585
威望
0
注册时间
2014-1-6
在线时间
577 小时
最后登录
2017-1-20
发表于 2016-12-29 10:18:51 | 显示全部楼层
非常不建议你运行时自己做图集合并,首先你这么干的话原始散碎的图片必须开启Read/Write属性(内存中会产生两份图片资源占用),另外这样的操作占用了运行时的cpu消耗,完全是得不偿失。建议不要动态合并,使用静态合并!

回复 支持 反对

使用道具 举报

4四处流浪
417/500
排名
7373
昨日变化
5

10

主题

94

帖子

417

积分

Rank: 4

UID
152229
好友
0
蛮牛币
1550
威望
0
注册时间
2016-6-16
在线时间
171 小时
最后登录
2017-1-20
 楼主| 发表于 2016-12-29 11:30:23 | 显示全部楼层
死骑很厉害 发表于 2016-12-29 10:18
非常不建议你运行时自己做图集合并,首先你这么干的话原始散碎的图片必须开启Read/Write属性(内存中会产生 ...

如果这是绿幕抠图,更换背景呢???

回复 支持 反对

使用道具 举报

5熟悉之中
735/1000
排名
6948
昨日变化
83

2

主题

442

帖子

735

积分

Rank: 5Rank: 5

UID
92518
好友
1
蛮牛币
1513
威望
0
注册时间
2015-4-15
在线时间
167 小时
最后登录
2017-1-20

迈向小康

发表于 2016-12-29 18:02:23 | 显示全部楼层

谢谢分享!!!!!

回复

使用道具 举报

4四处流浪
361/500
排名
5300
昨日变化
30

5

主题

94

帖子

361

积分

Rank: 4

UID
172983
好友
0
蛮牛币
4308
威望
0
注册时间
2016-9-30
在线时间
106 小时
最后登录
2017-1-20
发表于 4 天前 | 显示全部楼层
谢谢分享!!!!!谢谢了

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表