Beispiel #1
0
    //---------------------------------------------------------------------------------------------------------
    /// <summary>
    /// 异步实列化物体
    /// </summary>
    /// <param name="resName">名字</param>
    /// <returns></returns>
    public IEnumerator InstantiateAsync(YieldArg yarg)
    {
        while (yieldLoading)
        {
            yield return(null);
        }
        yieldLoading = true;

        yarg.progress    = 1f;
        yarg.maxProgress = 1.1f;
        AssetRequest assetRequest = Assets.LoadAssetAsync(yarg.fn, typeof(GameObject));

        while (!assetRequest.isDone)
        {
            yarg.progress += assetRequest.progress * 0.1f;
            yield return(null);
        }

        GameObject goObjClone = Instantiate((GameObject)assetRequest.asset);

        if (goObjClone == null)
        {
            Debug.LogError(GetType() + "/InstantiateAsync()/克隆资源不成功,请检查。 path=" + yarg.fn);
        }
        goObjClone.AddComponent <OnGameObjectDestroy>().resName = yarg.fn;
        yarg.result = goObjClone;
        yarg.isDone = true;

        yieldLoading = false;
    }
    IEnumerator LoadPrefab()
    {
        YieldArg yarg = new YieldArg(prefabUrl);

        CoroutineMgr.Instance.MyStartCoroutine(ResourcesMgr.Instance.InstantiateAsync(yarg));

        while (!yarg.isDone)
        {
            yield return(null);
        }
        if (EffectGo || !this)
        {
            Destroy((GameObject)yarg.result);
            yield return(null);
        }
        GameObject go = (GameObject)yarg.result;

        SetGameObject(go);
    }