先看看 RawImage加载Image的区别:
RawImage核心代码比Image少很多,Raw Image不支持交互,可用于显示任何图片而不仅仅是Sprite,一般用在背景、图标上,支持UV Rect(用来设置只显示图片的某一部分),而Image不支持UV Rect
前提:
从这可以看出当需要显示一张(外部)加载的图片时 切不用与之交互时
这时候我们就看当地用哪一种方法显示了
直接说吧 我加载一张image分辨率 1000*1030 加载赋值一百次 所用时长
加载一张同样分辨率的图片 以RawImage赋值一百次 所用时长
差距自己计算,自己掂量一下该怎么使用
直接上测试代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Test3 : MonoBehaviour {
public Image ImageObject;
public RawImage RawImageObject;
public void OnClickImageButton() //Image组件赋值方法
{
var path = Application.streamingAssetsPath + "/1.jpg";//外部图片地址
var tex = Download(path).texture;//使用www加载外部图片(这个方法是自己写的, 不会的话自己上网百度下)
var time = Time.realtimeSinceStartup;
for (var i = 0; i < 100; i++)
{
var sprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), new Vector2(0.5f, 0.5f));
ImageObject.sprite = sprite;
}
Debug.Log("Image赋值100次使用时间: " + (Time.realtimeSinceStartup - time));
}
public void OnClickRawImageButton()//RawImage组件赋值方法
{
var path = Application.streamingAssetsPath + "/2.jpg";//外部图片地址
var tex = Download(path).texture;//使用www加载外部图片(这个方法是自己写的, 不会的话自己上网百度下)
var time = Time.realtimeSinceStartup;
for (var i = 0; i < 100; i++)
RawImageObject.texture = tex;
Debug.Log("RawImage赋值100次使用时间: " + (Time.realtimeSinceStartup - time));
}
public WWW Download(string path)
{
WWW www = new WWW(path);
YieldToStop(www);
return www;
}
private void YieldToStop(WWW www)
{
var @enum = DownloadEnumerator(www);
while (@enum.MoveNext()) ;
}
private IEnumerator DownloadEnumerator(WWW www)
{
while (!www.isDone) ;
yield return www;
}
}