一开始还是先骂一声妹的。
好不容易搞好多线程调式了。结果发现不能在里面调用任何unity3d的api.我操。你敢不敢在恶心点。人家fmod也不是多线程安全的。但是我自己保证的情况下还是准你调用的啊。但是我保证安全你还不让我调用。你要死啊。搞个协成。习惯了在C++的淫威下只手遮天。想干嘛就干吗。现在被困在你的所有api都要砸主线程调用。我勒个去。不过没办法。谁叫你是主动一方呢。
我只能接受了。
协程就协程吧。至少也是other thread.下面是一个封装
需要下载的那个资源。可以内部挂一个对象。一样因为必须有gameobject所以你要做什么要绕一圈。
this是任意的继承MonoBehaviour
void start()
{
m_dh = new GameObject();
m_dh.AddComponent<DownLoadHelp>();
}
void Update ()
{
DownLoadHelp dh = m_dh.GetComponent<DownLoadHelp>();
if(null != dh)
{
if(dh.IsEnd())
{
renderer.material.mainTexture = dh.m_res.m_data;
}
}
}
这个是辅助系在类。这样这个资源就变相的多线程加载了。
也算是可以隐藏一些了。本想想做到外部完全不知道还有下载这个过程的。但是unity3d下很难
public class DownLoadHelp : MonoBehaviour
{
public DownLoadHelp()
{
}
void Start()
{
StartCoroutine(DownLoad());
}
IEnumerator DownLoad()
{
if(null == m_www)
{
m_www = new WWW("file://D:/3332.jpg");
yield return m_www;
if(m_www.isDone)
{
m_res.m_data = m_www.texture;
}
}
}
public bool IsEnd()
{
return null != m_res.m_data;
}
void Update()
{
if(null != m_www)
{
m_res.m_State = (int)(m_www.progress * 100);
}
}
public Resource m_res = new Resource("test");
private WWW m_www = null;
}