Unity实现动态更换程序待机图片

Unity实现动态更换程序待机图片

前言

在之前的公司做过一些项目,项目有过这样的需求:软件的待机界面需要可以动态更换,这样既可以方便调试人员的工作,又可以节省开发人员的工作时间,可谓是一举两得。在之前的公司做项目一直对这个功能未做整理,所以在这里整理一下。

步骤

1.在项目下建立StreamingAssets文件夹,并在此文件夹下建立Pictures文件夹,如下图所示:
在这里插入图片描述
2.在项目中搭建一个Image组件,用来显示加载出来的图片,如下图所示:
在这里插入图片描述
3.编写LoadImage.cs脚本,用来加载图片,代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.IO;

namespace IoadImages
{
    public class LoadImage : MonoBehaviour
    {
        public List<string> filePaths = new List<string>();
        private string LAN;
        void Start()
        {
            LAN = Application.streamingAssetsPath + "/Pictures";
            LoadThis();
        }
        /// <summary>
        /// 加载图片逻辑
        /// </summary>
        void LoadThis()
        {
            string imgType = "*.BMP|*.GIF|*.JPG|*.PNG";
            string[] ImageType = imgType.Split('|');
            for (int i = 0; i < ImageType.Length; i++)
            {
                //获取文件夹下所有图片的路径
                string[] dirs = Directory.GetFiles(@"" + LAN, ImageType[i]);
                FileInfo[] arrFi = new FileInfo[dirs.Length];
                for (int j = 0; j < dirs.Length; j++)
                {
                    arrFi[j] = new FileInfo(dirs[j]);
                }
                SortAsFileCreationTime(ref arrFi);
                for (int k = 0; k < arrFi.Length; k++)
                {
                    filePaths.Add(arrFi[k].FullName);
                }
            }
        }
        /// <summary>
        /// C#创建时间排序(倒序)
        /// </summary>
        /// <param name="arrFi">待排序数组</param>
        private void SortAsFileCreationTime(ref FileInfo[] arrFi)
        {
            Array.Sort(arrFi, delegate (FileInfo x, FileInfo y) { return y.CreationTime.CompareTo(x.CreationTime); });
        }
    }
}

4.编写ShowImage.cs脚本,用来将获取到的图片加载到Image组件上显示出来,代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using UnityEngine.UI;

namespace IoadImages
{
    public class ShowImage : MonoBehaviour
    {
        //读取图片脚本实例化
        LoadImage loadImage;
        //图片制作成精灵组件
        public List<Sprite> sprites = new List<Sprite>();
        //显示图片
        public Image showImage;
        //截图的下标
        int index = 0;

        private void Start()
        {
            loadImage = transform.GetComponent<LoadImage>();
            ToShowThisImage();
        }

        /// <summary>
        /// 展示加载图片方法
        /// </summary>
        void ToShowThisImage()
        {
            StartCoroutine(ToShowImage());
        }

        /// <summary>
        /// 展示图片协程
        /// </summary>
        /// <returns></returns>
        IEnumerator ToShowImage()
        {
            yield return new WaitForSeconds(0.1f);
            ShowThisPhoto();
        }

        /// <summary>
        /// 展示图片
        /// </summary>
        void ShowThisPhoto()
        {
            for (int i = 0;i < loadImage.filePaths.Count;i++)
            {
                LoadByIo(loadImage.filePaths[i]);
                showImage.sprite = sprites[index];
            }
        }

        /// <summary>
        /// 以IO方式进行加载
        /// </summary>
        /// <param name="imagePath"></param>
        private void LoadByIo(string imagePath)
        {
            double startTime = (double)Time.deltaTime;
            //创建文件数据流
            FileStream fileStream = new FileStream(imagePath,FileMode.Open,FileAccess.Read);
            fileStream.Seek(0,SeekOrigin.Begin);
            //创建文件长度缓充区
            byte[] bytes = new byte[fileStream.Length];
            //读取文件
            fileStream.Read(bytes,0,(int)fileStream.Length);
            //释放文件读取流
            fileStream.Close();
            fileStream.Dispose();
            fileStream = null;
            //创建Texture
            int width = 400;
            int height = 960;
            Texture2D texture = new Texture2D(width,height);
            texture.LoadImage(bytes);
            Sprite sprite = Sprite.Create(texture,new Rect(0,0,texture.width,texture.height),new Vector2(0.5f,0.5f));
            sprites.Add(sprite);
        }
    }
}

5.将这两个脚本挂载到场景中的物体上,将相关组件拖拽到相关物体上,如下图所示:
在这里插入图片描述
6.点击运行项目,发现Picture里的图片已经加载显示了出来,如下图所示:
在这里插入图片描述
7.将Picture文件夹中的图片替换一张,再次运行项目,发现图片也显示了出来,功能完成。
在这里插入图片描述

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

波波斯维奇

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

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

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

打赏作者

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

抵扣说明:

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

余额充值