服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - Unity 从Resources中动态加载Sprite图片的操作

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

2022-11-11 14:15爱尚游Bin C#

这篇文章主要介绍了Unity 从Resources中动态加载Sprite图片的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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运行时加载本地文件夹下所有图片的方法

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//引入命名空间
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();
    }

用的时候:

?
1
2
3
4
5
6
7
8
9
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); 
}

二、临时加载一张图片

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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();
       }
    }

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

原文链接:https://blog.csdn.net/wks310/article/details/86061768

延伸 · 阅读

精彩推荐
  • C#C#单位转换器简单案例

    C#单位转换器简单案例

    这篇文章主要为大家详细介绍了C#单位转换器简单案例,一个简单的winform应用程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    夏絮风9552021-12-23
  • C#c#判断email地址是否为合法

    c#判断email地址是否为合法

    输入email地址使用c#语言检测出email地址是否是合法的,这篇文章主要介绍了c#判断email地址是否为合法的相关资料,需要的朋友可以参考下...

    WinTuzi4092021-12-01
  • C#C#实现Windows Form调用R进行绘图与显示的方法

    C#实现Windows Form调用R进行绘图与显示的方法

    众所周知R软件功能非常强大,可以很好的进行各类统计,并能输出图形。下面介绍一种R语言和C#进行通信的方法,并将R绘图结果显示到WinForm UI界面上的方...

    JackWang-CUMT8882021-12-27
  • C#C# 9.0 新特性之模式匹配简化的实现

    C# 9.0 新特性之模式匹配简化的实现

    这篇文章主要介绍了C# 9.0 新特性之模式匹配简化的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友...

    Liam Wang6592022-09-14
  • C#C#利用SharpPcap实现网络包捕获嗅探

    C#利用SharpPcap实现网络包捕获嗅探

    这篇文章主要为大家详细介绍了C#利用SharpPcap实现网络包捕获嗅探,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Alan.hsiang10482022-02-21
  • C#谈谈C# replace在正则表达式中的意义

    谈谈C# replace在正则表达式中的意义

    这篇文章主要介绍了C# replace在正则表达式中的意义的相关资料,需要的朋友可以参考下...

    网站自由开发者7212021-11-15
  • C#基于c#实现的九九乘法表(简单实例)

    基于c#实现的九九乘法表(简单实例)

    本文主要分享了基于c#实现的九九乘法表,代码简洁,需要的朋友可以参考下,希望对大家有所帮助...

    冷战9172021-12-14
  • C#c# 开发文字识别软件

    c# 开发文字识别软件

    这篇文章主要介绍了c# 开发文字识别软件的方法,帮助大家更好的利用c#进行文字识别,感兴趣的朋友可以了解下...

    沐汐Vicky9692022-10-24