Unity 从Resources中动态加载Sprite图片的操作

 更新时间:2021年04月12日 08:34:32   作者:爱尚游Bin  
这篇文章主要介绍了Unity 从Resources中动态加载Sprite图片的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

我就废话不多说了,大家还是直接看代码吧~

 public  Sprite LoadSourceSprite(string relativePath)
    {
        //Debug.Log("relativePath=" + relativePath);
        //把资源加载到内存中
        Object Preb = Resources.Load(relativePath, typeof(Sprite));
        Sprite tmpsprite = null;
        try
        {
            tmpsprite = Instantiate(Preb) as Sprite;
        }
        catch ( System.Exception ex )
        {
        }
        //用加载得到的资源对象,实例化游戏对象,实现游戏物体的动态加载
        return tmpsprite;
        //return Resources.Load(relativePath, typeof(Sprite)) as Sprite;
    }

补充:Unity运行时动态加载本地图片

一、Unity运行时加载本地文件夹下所有图片的方法

用于在使用图片前加载完成

//引入命名空间
using System;
using System.IO;
    /// <summary>
    /// 加载图片的Byte[]数组
    /// </summary>
    /// <param name="filesName">地址</param>
    public List<byte[]> LoadImage(string filesName)
    {
        List<byte[]> list = new List<byte[]>();
        string tempPath ="E:\"+filesName;  // 图片所在文件夹地址
        List<string> filePaths = new List<string>();
        string imgtype = "*.BMP|*.JPG|*.PNG";
        string[] ImageType = imgtype.Split('|');
        for (int i = 0; i < ImageType.Length; i++)
        {
            //文件夹下所有的图片路径  
            string[] dirs = Directory.GetFiles(tempPath, ImageType[i]);
            for (int j = 0; j < dirs.Length; j++)
            {
                filePaths.Add(dirs[j]);
            }
        }
        for (int i = 0; i < filePaths.Count; i++)
        {
            byte[] bs = getImageByte(filePaths[i]);
            list.Add(bs);
        }
        return list;
    }
    #endregion
    /// <summary>  
    /// 根据图片路径返回图片的字节流byte[]  
    /// </summary>  
    /// <param name="imagePath">图片路径</param>  
    /// <returns>返回的字节流</returns>  
    private byte[] getImageByte(string imagePath)
    {
        FileStream files = new FileStream(imagePath, FileMode.Open,FileAccess.Read);
        files.Seek(0,SeekOrigin.Begin);
        byte[] imgByte = new byte[files.Length];
        files.BeginRead(imgByte,0,(int)files.Length,CallBack,files);
        return imgByte;
    }
    /// <summary>
    /// 异步加载
    /// </summary>
    /// <param name="ar"></param>
    void CallBack(IAsyncResult ar)
    {
        FileStream fs = ar.AsyncState as FileStream;
        fs.Close();
        fs.Dispose();
    }

用的时候:

List<byte[]> data=new  List<byte[]>();  //临时接收图片数据流
List<Texture2D> turList=new List<Texture2D>();  //保存图片
data=加载类.LoadImage("测试图片");
foreach (byte[] item in data)
{
   Texture2D tex = new Texture2D(100, 100, TextureFormat.RGBA32, false);  
   tex.LoadImage(item); //建议哪里调用哪里转  还可转精灵
   turList.Add(tex);  
}

二、临时加载一张图片

public static class ImageLoad {
         public static Texture2D LoadImageByte(string path){
            FileStream files=new FileStream (PathSet.dataPath+path,FileMode.Open,FileAccess.Read);
            files.Seek(0,SeekOrigin.Begin);
            byte[] imgByte=new byte[files.Length];
            //少量临时加载会 红问号 
            //files.BeginRead(imgByte,0,(int)files.Length,CallBack,files);
            files.Read(imgByte,0,imgByte.Length);
            files.Close();
            Texture2D tx=new Texture2D (512,512);
            tx.LoadImage(imgByte);
            return tx;
        }
       static void CallBack(IAsyncResult ar){
           FileStream fileStream=ar.AsyncState as FileStream;
            fileStream.Close();
            fileStream.Dispose();
       } 
    }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • 利用C#版OpenCV实现圆心求取实例代码

    利用C#版OpenCV实现圆心求取实例代码

    这篇文章主要给大家介绍了关于如何利用C#版OpenCV实现圆心求取的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • C#基础知识之字符串和正则表达式

    C#基础知识之字符串和正则表达式

    目前为止许多编程语言和工具都包含对正则表达式的支持,C#也不例外,下面这篇文章主要给大家介绍了关于C#基础知识之字符串和正则表达式的相关资料,需要的朋友可以参考下
    2022-10-10
  • DevExpress实现自定义GridControl中按钮文字内容的方法

    DevExpress实现自定义GridControl中按钮文字内容的方法

    这篇文章主要介绍了DevExpress实现自定义GridControl中按钮文字内容的方法,需要的朋友可以参考下
    2014-08-08
  • C#获取视频某一帧的缩略图的方法

    C#获取视频某一帧的缩略图的方法

    这篇文章主要介绍了C#获取视频某一帧的缩略图的方法,涉及执行CMD命令及针对视频文件操作的技巧,具有一定的实用价值,需要的朋友可以参考下
    2014-11-11
  • C#中的协变与逆变方式

    C#中的协变与逆变方式

    协变和逆变是C#中处理泛型类型参数可变性的两个重要概念,协变允许将派生类型的泛型参数转换为基类型的泛型参数,而逆变允许将基类型的泛型参数转换为派生类型的泛型参数,通过协变和逆变,可以提高代码的灵活性和可重用性,但也需要注意类型参数的限制和安全性
    2024-12-12
  • C#中Trim()、TrimStart()、TrimEnd()的用法介绍

    C#中Trim()、TrimStart()、TrimEnd()的用法介绍

    这篇文章主要介绍了C#中Trim()、TrimStart()、TrimEnd()的用法,有需要的朋友可以参考一下
    2014-01-01
  • C#多线程用法详解

    C#多线程用法详解

    本文详细讲解了C#多线程用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • C#使用StringBuilder实现高效处理字符串

    C#使用StringBuilder实现高效处理字符串

    这篇文章主要为大家详细介绍了C#如何使用StringBuilder实现高效处理字符串,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • C#使用is、as关键字以及显式强转实现引用类型转换

    C#使用is、as关键字以及显式强转实现引用类型转换

    这篇文章介绍了C#使用is、as关键字以及显式强转实现引用类型转换的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • C#词法分析器之词法分析的使用详解

    C#词法分析器之词法分析的使用详解

    本篇文章介绍了,C#词法分析器之词法分析的使用详解。需要的朋友参考下
    2013-05-05

最新评论