一个关于异步下载的封装

一开始还是先骂一声妹的。

好不容易搞好多线程调式了。结果发现不能在里面调用任何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;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值