// 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); } } }
/// <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 }); }