Unity3D如何加载外部图片并当做Sprite使用

    前段时间做东西,需要可以在文件夹下面更改图片,达到运行后图片更改的效果,并且需要将读取到的图片转换成Sprite精灵使用.因为我要用到图片的填充效果.经过网上的学习,这里总结一下实现的方法和思路.以及实现代码

1.首先第一步需要做的时知道如何读取到外部的图片文件.这里使用FileStream文件流类.

这里首先写一个处理文件流的方法:

 private static byte[] getImageByte(string imagePath)
    {
        //读取到文件
        FileStream files = new FileStream(imagePath, FileMode.Open);
        //新建比特流对象
        byte[] imgByte = new byte[files.Length];
        //将文件写入对应比特流对象
        files.Read(imgByte, 0, imgByte.Length);
        //关闭文件
        files.Close();
        //返回比特流的值
        return imgByte;
    }

每一个步骤的内容都在代码中标注了.通过上面的方法,最终,我们能得到对应文件路径下的文件的比特流.

    但是现在面临了一个问题,读取文件,是要清楚地知道文件路径的,但是如果我不知道文件名呢,需要的结果是不管这个文件夹下面有多少图片,名称怎么样我都得读取得到才行,这里通过Directory类中的方法 Directory.GetFiles("路劲名称")可以获取到一个文件夹下所有文件的名称,方法如下

  private List  GetImagePath()
    {
        List filePaths = new List();
        string imgtype = "*.JPG|*.PNG";
        string[] ImageType = imgtype.Split('|');
        for (int i = 0; i < ImageType.Length; i++)
        {

            //获取unity根目录下的图片文件夹下的所有文件的路径 路径+ 名称全部存储在字符串数组中
            string[] dirs = Directory.GetFiles(Application.dataPath + @"/图片", ImageType[i]);
            //
            for (int j = 0; j < dirs.Length; j++)
            {
                filePaths.Add(dirs[j]);
                Debug.Log("图片路径为     " + dirs[j]);
            }
            Debug.Log("一共读取到" + dirs.Length + "张图片");
        }

        return filePaths;
    }

最后整合一下一个方法,不仅获取到Texture文件,同时也将Texture格式转换成Sprite文件

  List loadTexture = new List();
    List loadsprite = new List();

  private void LoadTexture2Sprite()
    {
        //清空一下,防止爆满
        loadTexture.Clear();
        loadsprite.Clear();
        //获取到路劲
        List filePaths = new List();


        filePaths =  GetImagePath();
        //新建时要给上大小,小于原先的图片大小会出现图片值截取一块的情况
       
        //根据读取到的文件路径,一个文件一个文件的将图片存储进去
        for (int i = 0; i < filePaths.Count; i++)
        {
            Texture2D t2d = new Texture2D(1920, 1080);
            //根据路劲读取字节流再转换成图片形式
            t2d.LoadImage(getImageByte(filePaths[i]));
            //放到集合里面
            loadTexture.Add(t2d);
            //将Texture创建成Sprite 参数分别为图片源文件,Rect值给出起始点和大小 以及锚点的位置
            Sprite sprite = Sprite.Create(t2d, new Rect(0, 0, t2d.width, t2d.height), Vector2.zero);
            //放入集合
            loadsprite.Add(sprite);
        }




    }

       
    

通过写上一些辅助方法,图片改一改填充,换换图片的功能,最后得到的结果如下:



到这里,如何加载图片以及转换成Sprite调用就写完了,大家是否学会了呢

你可能感兴趣的:(U3D学习)