コード例 #1
0
    /// <summary>
    /// 异步从AssetBundle加载资源,加载完成后可以调用UnloadAssetBundle提前卸载AssetBundle
    /// </summary>
    /// <returns>可以使用协程等待结果或者检查IsDone</returns>
    public static AMLoadAssetOperation LoadAssetAsync(string assetBundleName, string assetName, System.Type type)
    {
        AMLoadAssetOperation operation = null;

#if UNITY_EDITOR
        if (SimulateAssetBundleInEditor)
        {
            string[] assetPaths = UnityEditor.AssetDatabase.GetAssetPathsFromAssetBundleAndAssetName(assetBundleName, assetName);
            if (assetPaths.Length == 0)
            {
                Debug.LogError("There is no asset with name \"" + assetName + "\" in " + assetBundleName);
                return(null);
            }

            // @TODO: Now we only get the main object from the first asset. Should consider type also.
            Object target = UnityEditor.AssetDatabase.LoadAssetAtPath(assetPaths[0], type);
            operation = new AssetBundleLoadAssetOperationSimulation(target);
        }
        else
#endif
        {
            LoadAssetBundle(assetBundleName, false);
            operation = new AssetBundleLoadAssetOperationSecond(assetBundleName, assetName, type);
            m_inProgressOperations.Add(operation);
        }

        return(operation);
    }
コード例 #2
0
    public void Destroy()
    {
        if (asyncLoadOp != null)
        {
            asyncLoadOp.UnloadAssetBundle();
            asyncLoadOp = null;
        }

        if (gameObject != null)
        {
            UnityEngine.Object.Destroy(gameObject);
            gameObject = null;
        }
    }
コード例 #3
0
    private void LoadAsset()
    {
        EffectObject instance = EffectManager.Find(EffectID);

        if (instance != null && instance.modelGo != null)
        {
            // 有实例从实例复制
            InstantiateModel(instance.modelGo);
        }
        else
        {
            // 没有实例从资源加载
            asyncLoadOp = AssetBundleManager.LoadAssetAsync(assetBundlePath, config.AssetName, typeof(GameObject));
        }
    }
コード例 #4
0
    public void Destroy()
    {
        ResetState();

        if (asyncLoadOp != null)
        {
            asyncLoadOp.UnloadAssetBundle();
            asyncLoadOp = null;
        }

        if (gameObject != null)
        {
            Object.Destroy(gameObject);
            gameObject = null;
        }
    }
コード例 #5
0
ファイル: AudioObject.cs プロジェクト: shuishang/ChessSoldier
    private void LoadAsset()
    {
        AudioObject instance = AudioManager.Find(AudioID);

        if (instance != null && instance.audioClip != null)
        {
            // 有实例从实例复制
            audioClip        = instance.audioClip;
            audioSource.clip = audioClip;
        }
        else
        {
            // 没有实例从资源加载
            asyncLoadOp = AssetBundleManager.LoadAssetAsync(assetBundlePath, config.AssetName, typeof(AudioClip));
        }
    }
コード例 #6
0
    private void CheckLoading()
    {
        if (asyncLoadOp != null)
        {
            if (asyncLoadOp.IsDone())
            {
                GameObject prefab = asyncLoadOp.GetAsset <GameObject>();
                if (prefab != null)
                {
                    InstantiateModel(prefab);
                }
                else
                {
                    StopImmediate();
                }

                asyncLoadOp.UnloadAssetBundle();
                asyncLoadOp = null;
            }
        }
    }
コード例 #7
0
    private void CheckLoading()
    {
        if (asyncLoadOp != null)
        {
            if (asyncLoadOp.IsDone())
            {
                audioClip        = asyncLoadOp.GetAsset <AudioClip>();
                audioSource.clip = audioClip;

                AssetBundleManager.UnloadAssetBundle(assetBundlePath);
                asyncLoadOp = null;

                if (audioClip == null)
                {
                    Stop();
                }
                else
                {
                    audioSource.Play();
                }
            }
        }
    }