Ejemplo n.º 1
0
        public object LoadAssetFromAssetBundle(string assetBundlePath, string assetName, LoadMode mode)
        {
            if (string.IsNullOrEmpty(assetBundlePath))
            {
                throw new ArgumentNullException("invalid path");
            }
            string assetBundleAbsolutePath = GetAbsolutePath(assetBundlePath, mode);
            string internalAssetName       = GetInternalAssetName(assetBundleAbsolutePath, assetName);

            while (true)
            {
                LoadAssetInfo info = GetLoadingAssetInfo(assetBundleAbsolutePath, assetName);
                if (info == null)
                {
                    break;
                }
            }

            if (m_Holder.HasAsset(internalAssetName))
            {
                return(m_Holder.GetAsset(internalAssetName));
            }

            object assetBundle = null;

            if (m_Holder.HasAssetBundle(assetBundleAbsolutePath))
            {
                assetBundle = m_Holder.GetAssetBundle(assetBundleAbsolutePath);
            }
            else
            {
                assetBundle = LoadAssetBundle(assetBundlePath, mode);
            }

            if (assetBundle == null)
            {
                return(null);
            }

            object asset = m_Loader.LoadAssetFromAssetBundle(assetBundle, assetName, mode);

            m_Holder.AddAsset(internalAssetName, asset);
            return(asset);
        }