private void ProcessCommonResources(TEntity entity, ICommonResourceComponent res, IUnityAssetManager loadRequestManager)
        {
            var time           = (int)(MyGameTime.time * 1000);
            var resourceLength = res.Resources.Length;

            for (var i = 0; i < resourceLength; i++)
            {
                var asset   = res.Resources[i];
                var actions = GetActions(i);
                if (asset == null || actions == null)
                {
                    continue;
                }
                if (asset.Status == EAssetLoadStatus.UnLoad)
                {
                    asset.Status          = EAssetLoadStatus.Loading;
                    asset.LastRequestTime = time;
                    loadRequestManager.LoadAssetAsync(
                        new AssetRequestSource(GetEntityKey(entity), res.GetComponentId(), asset.ResIndex, asset.LastRequestTime),
                        asset.AssetInfo, OnLoadSucc, _assetLoadOption);
                }
                else if (asset.Status == EAssetLoadStatus.UnInit)
                {
                    if (actions.CanInit(entity, asset))
                    {
                        actions.Init(entity, asset);
                        asset.Status = EAssetLoadStatus.Loaded;
                    }
                }
            }
        }
        private static AssetStatus LoadResource(ICommonResourceComponent comp, int index, AssetInfo assetInfo, int time, bool forceReload = false)
        {
            AssertUtility.Assert(index < comp.Resources.Length);
            var oldStatus = comp.Resources[index];

            if (oldStatus.AssetInfo.Equals(assetInfo) && !forceReload)
            {
                return(null);
            }

            var newStatus = comp.Resources[index] = ObjectAllocatorHolder <AssetStatus> .Allocate();

            newStatus.LastRequestTime = time;
            newStatus.Status          = EAssetLoadStatus.UnLoad;
            newStatus.Object          = null;
            newStatus.AssetInfo       = assetInfo;
            newStatus.ResIndex        = index;
            return(oldStatus);
        }
        public static AssetStatus UnloadResource(ICommonResourceComponent comp, int index)
        {
            AssertUtility.Assert(index < comp.Resources.Length);
            var oldStatus = comp.Resources[index];

            if (oldStatus.Status == EAssetLoadStatus.None)
            {
                return(null);
            }

            var newStatus = comp.Resources[index] = ObjectAllocatorHolder <AssetStatus> .Allocate();

            newStatus.LastRequestTime = 0;
            newStatus.Status          = EAssetLoadStatus.None;
            newStatus.Object          = null;
            newStatus.AssetInfo       = AssetInfo.EmptyInstance;
            newStatus.ResIndex        = index;
            return(oldStatus);
        }