/// <summary> /// 实例化资源接口中间回调 /// </summary> /// <param name="assetKey"></param> /// <param name="initObject"></param> private void OnLoadAssetCallBack(AssetKey assetKey, UnityEngine.Object initObject) { string assetKeyName = assetKey.ToString(); if (m_AssetToGameObjectInstantiateData.ContainsKey(assetKeyName)) { Queue <GameObjectInstantiateData> mGameObjectInstantiateQueue = m_AssetToGameObjectInstantiateData[assetKeyName]; while (mGameObjectInstantiateQueue.Count > 0) { GameObjectInstantiateData gameObjectInstantiateData = mGameObjectInstantiateQueue.Dequeue(); GameObject gameObject = null; if (initObject is GameObject) { gameObject = GameObject.Instantiate(initObject) as GameObject; if (!gameObjectInstantiateData.BasicData.IsWorldSpace) { if (gameObjectInstantiateData.BasicData.Parent != null) { gameObject.transform.SetParent(gameObjectInstantiateData.BasicData.Parent); } } gameObject.transform.localPosition = gameObjectInstantiateData.BasicData.Position; gameObject.transform.localScale = Vector3.one; } gameObjectInstantiateData.GameObjectCallback(assetKey, gameObject); } } }
/// <summary> /// 实例化GameObject /// </summary> /// <param name="assetKey"></param> /// <param name="callback"></param> /// <param name="instantiateBasicData"></param> public void InstantiateGameObjectAsync(AssetKey assetKey, Action <AssetKey, UnityEngine.Object> callback, InstantiateBasicData instantiateBasicData = default) { GameObjectInstantiateData gameObjectInstantiateData = new GameObjectInstantiateData() { BasicData = instantiateBasicData, GameObjectCallback = callback }; string assetKeyName = assetKey.ToString(); if (!m_AssetToGameObjectInstantiateData.ContainsKey(assetKeyName)) { Queue <GameObjectInstantiateData> queue = new Queue <GameObjectInstantiateData>(); m_AssetToGameObjectInstantiateData.Add(assetKeyName, queue); } m_AssetToGameObjectInstantiateData[assetKeyName].Enqueue(gameObjectInstantiateData); LoadAssetAsync(assetKey, OnLoadAssetCallBack); }