Esempio n. 1
0
    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            Debug.LogInfor("Time=" + Time.realtimeSinceStartup + "Frame=" + EventCenter.Instance.CurFrameCount);
            PrefabLoader loader = PrefabLoader.LoadAsset(transform, m_Url, m_LoadAssetModel, OnComplete);
            //loader.ReduceReference(loader, false);
        }

        if (Input.GetKeyDown(KeyCode.B))
        {
            if (m_LoadAssetModel == LoadAssetModel.Async)
            {
                ResourcesMgr.Instance.InstantiateAsync(m_Url, transform, (obj) =>
                {
                    Debug.Log("生成成功");
                }, true);
            }
            else
            {
                GameObject go = ResourcesMgr.Instance.InstantiateSync(m_Url, transform);
            }
        }
    }
Esempio n. 2
0
        /// <summary>
        /// 根据指定的路径加载一个预制体资源并生成对应的实例
        /// </summary>
        /// <param name="url">资源唯一路径</param>
        /// <param name="parent">实例生成后挂载在那个父节点下</param>
        /// <param name="callback">加载资源成功后的回调</param>
        /// <param name="isActivate">默认为tue 标识生成的实例为激活状态</param>
        /// <param name="isResetTransProperty">默认为tue 标识是否重置生成对象的Transform 属性</param>
        /// <returns></returns>
        private void Instantiate(string url, Transform parent, LoadAssetModel loadModel, System.Action <GameObject> callback, bool isActivate = true, bool isResetTransProperty = true)
        {
#if UNITY_EDITOR
            Debug.LogEditorInfor(string.Format("[ResourcesMgr ] Instantiate Begin >>>>  url={0}  LoadModel={1} Time={2}   RederFrameCont={3}", url, loadModel, Time.realtimeSinceStartup, Time.renderedFrameCount));
#endif


            if (string.IsNullOrEmpty(url))
            {
                if (callback != null)
                {
                    callback(null);
                }
                return;
            }


            PrefabLoader.LoadAsset(parent, url, loadModel, (loader) =>
            {
                #region  加载成功后的处理逻辑
                ResourcesLoadTraceMgr.Instance.RecordTraceResourceInfor(loader);
                if (loader == null || loader.ResultObj == null || (loader.IsCompleted && loader.IsError))
                {
                    Debug.LogError("Instantiate  GameObject Fail,Not Exit At Path= " + url);
                    if (callback != null)
                    {
                        callback.Invoke(null);
                    }
                    return;
                }  //加载资源出错
                GameObject prefabGo = loader.ResultObj as GameObject;
                if (prefabGo == null)
                {
                    Debug.LogError("Instantiate  GameObject Fail,Load Result Not GameObject Type " + loader.ResultObj.GetType());
                    if (callback != null)
                    {
                        callback.Invoke(null);
                    }
                    return;
                }
                if (isActivate == false)
                {
                    prefabGo.SetActive(false);   //临时改变预制体资源的可见性 返回前恢复
                }
                GameObject go = GameObject.Instantiate(prefabGo, parent);
                go.name       = prefabGo.name;

                if (isResetTransProperty)
                {
                    if (go.transform is RectTransform)
                    {
                        (go.transform as RectTransform).ResetRectTransProperty();
                    }
                    else
                    {
                        go.transform.ResetTransProperty();
                    }
                }

                if (isActivate == false)
                {
                    prefabGo.SetActive(true);   //恢复可见性
                }
#if UNITY_EDITOR
                Debug.LogEditorInfor(string.Format("[ResourcesMgr ] Instantiate Complete <<<<<  url={0}  LoadModel={1} Time={2}  RederFrameCont={3}", url, loadModel, Time.realtimeSinceStartup, Time.renderedFrameCount));
#endif

                if (callback != null)
                {
                    callback.Invoke(go);
                }

                #endregion
            });
        }