Esempio n. 1
0
        public object LoadAssetBundle(string assetBundlePath, LoadMode mode)
        {
            if (string.IsNullOrEmpty(assetBundlePath))
            {
                throw new ArgumentNullException("invalid path");
            }
            string assetBundleAbsolutePath = GetAbsolutePath(assetBundlePath, mode);

            while (true)
            {
                LoadAssetBundleInfo info = GetLoadingAssetBundleInfo(assetBundleAbsolutePath);
                if (info == null)
                {
                    break;
                }
            }

            if (m_Holder.HasAssetBundle(assetBundleAbsolutePath))
            {
                return(m_Holder.GetAssetBundle(assetBundleAbsolutePath));
            }

            if (m_DependencyManifest != null)
            {
                string[] dependencies = m_DependencyManifest.GetAllDependencies(assetBundlePath);
                if (dependencies != null && dependencies.Length > 0)
                {
                    for (int i = 0; i < dependencies.Length; ++i)
                    {
                        LoadAssetBundle(dependencies[i], mode);
                    }
                }
            }

            byte[] data        = m_Loader.LoadAssetBundleBytes(assetBundleAbsolutePath, mode);
            object assetBundle = m_Decoder.DecodeAssetBundle(data);

            m_Holder.AddAssetBundle(assetBundleAbsolutePath, assetBundle);
            return(assetBundle);
        }