Exemplo n.º 1
0
 void Start()
 {
     // 初始化引用关系
     BundleDependencies.LoadBundleDependencies();
     // 初始化资源和bundle的对应关系
     BundleAsset.LoadBundleAssets();
 }
Exemplo n.º 2
0
    private static void DestroyObject(ObjectReference or)
    {
        // 删除自己
        if (ResourceUtil.isLog)
        {
            Debug.Log("UnloadAsset " + or.assetName);
        }
        if (!(or.obj is GameObject))
        {
            Resources.UnloadAsset(or.obj);
        }
        //else

        /* GameObejct的释放方法
         *  1 assetbundle.unload(true)
         *  2 Resources.UnloadUnusedAsset()
         */


        // 释放引用bundle
        string bundleName = BundleAsset.GetBundleName(or.assetName);

        if (bundleName == null)
        {
            return;
        }
        ReferenceBundle.ReleaseBundle(bundleName);
    }
Exemplo n.º 3
0
    private IEnumerator BeginInitialize()
    {
        if (mStatus == LoadStatus.Done)
        {
            yield break;
        }
        else if (mStatus == LoadStatus.Loading)
        {
            yield return(new WaitUntil(() => mStatus == LoadStatus.Done));
        }
        else
        {
            mStatus = LoadStatus.Loading;
            //初始化资源列表
            yield return(AssetPath.Initialize());

            if (AssetPath.mode == AssetMode.AssetBundle)
            {
                BundleAsset bundle = GetOrCreateBundle <BundleAsset>(AssetPath.list.manifest);

                AssetLoadTask <AssetBundleManifest> task = new AssetLoadTask <AssetBundleManifest>(AssetPath.list.manifest, FinishInitialize);

                task.assetName = "AssetBundleManifest";

                yield return(bundle.LoadAssetAsync(task));
            }
            else
            {
                FinishInitialize(null);
            }
        }
    }
    /// <summary>
    /// 异步加载资源
    /// </summary>
    /// <param name="assetName">资源名</param>
    private static void LoadAssetAsync(LoadAssetInfo loadAssetInfo)
    {
        AssetBundle        assetBundle       = ReferenceBundle.GetAssetBundle(loadAssetInfo.bundleName);
        string             assetInBundleName = BundleAsset.GetAssetInBundleName(loadAssetInfo.assetName);
        AssetBundleRequest request           = assetBundle.LoadAssetAsync(assetInBundleName);

        loadAssetInfo.request = request;
        EnterLoading(loadAssetInfo);
    }
    /// <summary>
    /// 异步加载资源
    /// </summary>
    /// <param name="assetName">需要加载的资源路径</param>
    /// <param name="onLoadAsset">加载成功之后的回调</param>
    /// <returns>请求Id</returns>
    public static int LoadAssetAsync(string assetName, OnLoadAsset onLoadAsset)
    {
        // 回调不存在不允加载
        if (onLoadAsset == null)
        {
            GameLogger.LogError("[资源加载错误] 加载函数回调不能为空,加载后也没有引用");
            return(0);
        }

        // 资源对应bundle名
        string abName = BundleAsset.GetBundleName(assetName);

        if (abName == null)
        {
            GameLogger.LogError("[资源加载错误] 找不到资源 ", assetName);
            return(0);
        }

        // 获取请求ID
        int requestId = ResourceManager.GetRequestId();

        LoadAssetInfo loadAssetInfo = GetTempLoadAssetInfo();

        loadAssetInfo.requestId   = requestId;
        loadAssetInfo.assetName   = assetName;
        loadAssetInfo.onLoadAsset = onLoadAsset;
        loadAssetInfo.bundleName  = abName;
        EnterLoadWait(loadAssetInfo);

        // 1 asset是否已加载
        if (ReferenceObject.IsObjectCreate(loadAssetInfo.assetName))
        {
            EnterWaitCall(loadAssetInfo);
        }

        // 2 bundle是否已加载
        else if (!ReferenceBundle.IsAssetBundleCraete(abName))
        {
            PushPending(loadAssetInfo);
        }

        // 3 从bundle加载资源
        else
        {
            List <LoadAssetInfo> loadingAssetList = GetLoadAssetStateList(LoadAssetStep.Loading);
            if (loadingAssetList.Count < _frameLoadMaxCount)
            {
                LoadAssetAsync(loadAssetInfo);
            }
        }

        _loadAssetInfoList.Add(loadAssetInfo);

        return(requestId);
    }
Exemplo n.º 6
0
 private void AddDependenceBy(BundleAsset parent)
 {
     if (parent == null)
     {
         return;
     }
     if (dependencesby.ContainsKey(parent.bundleName) == false)
     {
         dependencesby.Add(parent.bundleName, parent);
     }
 }
Exemplo n.º 7
0
    private IEnumerator LoadAssetAsync <T>(IAssetLoadTask <T> task) where T : UnityEngine.Object
    {
        if (mStatus != LoadStatus.Done)
        {
            yield return(BeginInitialize());
        }


        BundleAsset bundle = GetOrCreateBundle <BundleAsset>(task.bundleName);

        yield return(bundle.LoadAssetAsync(task));
    }
Exemplo n.º 8
0
Arquivo: Asset.cs Projeto: Enanyy/moon
    public Asset(string assetName, BundleAsset bundle, Object asset, T assetObject)
    {
        this.assetName   = assetName;
        this.bundle      = bundle;
        this.asset       = asset;
        this.assetObject = assetObject;

        if (bundle != null)
        {
            bundle.AddReference(this);
        }
    }
Exemplo n.º 9
0
        private async Task <IList <BundleAsset> > AssestsList(string pageName, string role)
        {
            BundleAsset bundleAsset = new BundleAsset();

            bundleAsset.Roles       = role;
            bundleAsset.ExcessMode  = excessMode;
            bundleAsset.Application = Application;
            bundleAsset.UserArea    = UserArea;
            bundleAsset.PageName    = pageName;
            AssestController    assestController = new AssestController();
            IList <BundleAsset> bundleAssets     = await assestController.GetAssets(bundleAsset);

            return(bundleAssets);
        }
Exemplo n.º 10
0
    void Start()
    {
        IOTools.Init();
        BundleAsset.LoadAb("common" + IOTools.abSuffix);

        var actor = ActorManager.Singleton.CreateActor(0, ActorType.Player, 1, 1000);

        ActorManager.Singleton.SetPlayer(actor);
        // CreateNavAgent();
        // pathFinding = new ActorPathFinding();
        //pathFinding.Init(seeker,controller,target);

        MyTileHandlerHelper.Singleton.Start();
    }
Exemplo n.º 11
0
    private void RemoveDependenceBy(BundleAsset parent)
    {
        if (parent == null)
        {
            return;
        }

        dependencesby.Remove(parent.bundleName);

        if (dependencesby.Count == 0)
        {
            //检查是否可以被卸载
            RemoveReference();
        }
    }
    /// <summary>
    /// 检测加载回调
    /// </summary>
    private static void CheckLoad()
    {
        List <LoadAssetInfo> loadAssetInfoList = GetLoadAssetStateList(LoadAssetStep.Loading);

        if (loadAssetInfoList.Count == 0)
        {
            return;
        }

        foreach (LoadAssetInfo loadAssetInfo in loadAssetInfoList)
        {
            AssetBundleRequest request = loadAssetInfo.request;
            if (request == null)
            {
                continue;
            }
            if (!request.isDone)
            {
                continue;
            }

            Object asset = request.asset;
            if (asset == null)
            {
                continue;
            }

            // 资源加载成功 进入等待回调状态
            string assetInBundleName = BundleAsset.GetAssetInBundleName(loadAssetInfo.assetName);
            if (asset.name == assetInBundleName)
            {
                ReferenceObject.AddObject(loadAssetInfo.assetName, asset);
                loadAssetInfo.asset = asset;
                EnterWaitCall(loadAssetInfo);
                // 加载成功一个资源之后 从等待列表中释放一个 维持每帧加载上线
                List <LoadAssetInfo> loadWaitAssetList = GetLoadAssetStateList(LoadAssetStep.LoadWait);
                if (loadWaitAssetList.Count > 0)
                {
                    LoadAssetAsync(loadWaitAssetList[0]);
                }
                break;
            }
        }
    }
Exemplo n.º 13
0
    // Use this for initialization
    void Start()
    {
        // 初始化引用关系
        BundleDependencies.LoadBundleDependencies();
        // 初始化资源和bundle的对应关系
        BundleAsset.LoadBundleAssets();

        // 测试加载
        if (createType == CreateType.Bundle)
        {
            CreateBundle();
        }
        else if (createType == CreateType.Asset)
        {
            CreateAsset();
        }
        else if (createType == CreateType.GameObejct)
        {
            CreateGameObject();
        }
    }
Exemplo n.º 14
0
        public async Task <IList <BundleAsset> > GetAssets(BundleAsset bundleAsset)
        {
            IList <BundleAsset> bundleAssets;
            List <SQLParam>     sQLParam = new List <SQLParam>();

            sQLParam.Add(new SQLParam("@Roles", bundleAsset.Roles));
            sQLParam.Add(new SQLParam("@ExcessMode", bundleAsset.ExcessMode.ToString()));
            sQLParam.Add(new SQLParam("@Application", bundleAsset.Application));
            sQLParam.Add(new SQLParam("@UserArea", bundleAsset.UserArea));
            sQLParam.Add(new SQLParam("@PageName", bundleAsset.PageName));
            SQLGetListAsync sqlhandler = new SQLGetListAsync();

            try
            {
                bundleAssets = await sqlhandler.ExecuteAsListAsync <BundleAsset>("[dbo].[usp_webbuilder_asset_getAll]", sQLParam);
            }
            catch
            {
                throw;
            }
            return(bundleAssets);
        }
Exemplo n.º 15
0
    public override IEnumerator LoadAsync()
    {
#if UNITY_EDITOR
        if (AssetPath.mode == AssetMode.Editor)
        {
            yield break;
        }
#endif
        string[] dependenceNames = AssetLoader.GetDirectDependencies(bundleName);
        if (dependenceNames != null)
        {
            for (int i = 0; i < dependenceNames.Length; ++i)
            {
                string dependenceName = dependenceNames[i];

                BundleAsset bundleObject;
                if (dependences.TryGetValue(dependenceName, out bundleObject) == false)
                {
                    bundleObject = AssetLoader.GetOrCreateBundle <BundleAsset>(dependenceName);
                    bundleObject.AddDependenceBy(this);

                    dependences.Add(dependenceName, bundleObject);
                }
            }
        }

        var it = dependences.GetEnumerator();
        while (it.MoveNext())
        {
            BundleAsset bundleObject = it.Current.Value;
            if (bundleObject.status == LoadStatus.None)
            {
                yield return(bundleObject.LoadAsync());
            }
        }

        yield return(base.LoadAsync());
    }
Exemplo n.º 16
0
        public async Task <IList <BundleAsset> > GetAssets(BundleAsset bundleAsset)
        {
            AssetDataprovider assetDataprovider = new AssetDataprovider();

            return(await assetDataprovider.GetAssets(bundleAsset));
        }