在这里记录一下在 Unity3D 中分别使用 WWW 和 IO 流加载外部图片
使用 WWW 加载
/// <summary>
/// 使用 WWW 加载图片,并赋值给 _rawImage
/// </summary>
/// <param name="_url">图片地址</param>
/// <param name="_rawImage"></param>
/// <returns></returns>
public static IEnumerator LoadTexture2DByWWW(string _url, RawImage _rawImage)
{
WWW _www = new WWW(_url);
yield return _www;
if (_www.error == null)
{
_rawImage.texture = _www.texture;
}
else
{
Debug.LogError(_www.error);
}
}
/// <summary>
/// 使用 WWW 加载图片,并将图片转换成 Sprite 类型赋值给 _image
/// </summary>
/// <param name="_url">图片地址</param>
/// <param name="_image"></param>
/// <returns></returns>
public static IEnumerator LoadSpriteByWWW(string _url, Image _image)
{
WWW _www = new WWW(_url);
yield return _www;
if (_www.error == null)
{
_image.sprite = Sprite.Create(_www.texture, new Rect(0, 0, _www.texture.width, _www.texture.height), new Vector2(0.5f, 0.5f));
}
else
{
Debug.LogError(_www.error);
}
}
使用 IO 流加载
1 /// <summary>
2 /// 使用 IO 流加载图片,并返回。
3 /// </summary>
4 /// <param name="_url">图片地址</param>
5 /// <returns></returns>
6 public static Texture2D LoadTexture2DByIO(string _url)
7 {
8 //创建文件读取流
9 FileStream _fileStream = new FileStream(_url, FileMode.Open, FileAccess.Read);
10 _fileStream.Seek(0, SeekOrigin.Begin);
11 //创建文件长度缓冲区
12 byte[] _bytes = new byte[_fileStream.Length];
13 _fileStream.Read(_bytes, 0, (int)_fileStream.Length);
14 _fileStream.Close();
15 _fileStream.Dispose();
16 //创建Texture
17 Texture2D _texture2D = new Texture2D(1, 1);
18 _texture2D.LoadImage(_bytes);
19 return _texture2D;
20 }
21 /// <summary>
22 /// 使用 IO 流加载图片,并将图片转换成 Sprite 类型返回
23 /// </summary>
24 /// <param name="_url">图片地址</param>
25 /// <returns></returns>
26 public static Sprite LoadSpriteByIO(string _url)
27 {
28 Texture2D _texture2D = LoadTexture2DByIO(_url);
29 Sprite _sprite = Sprite.Create(_texture2D, new Rect(0, 0, _texture2D.width, _texture2D.height), new Vector2(0.5f, 0.5f));
30 return _sprite;
31 }