예제 #1
0
        /// <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);
                }
            }
        }
예제 #2
0
        /// <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);
        }