public IRes LoadResSync(ResSearchKeys resSearchKeys) { Add2Load(resSearchKeys); LoadSync(); var res = ResMgr.Instance.GetRes(resSearchKeys, false); if (res == null) { Log.E("Failed to Load Res:" + resSearchKeys); return(null); } return(res); }
public static IRes Create(ResSearchKeys resSearchKeys) { var retRes = mResCreators .Where(creator => creator.Match(resSearchKeys)) .Select(creator => creator.Create(resSearchKeys)) .FirstOrDefault(); if (retRes == null) { Log.E("Failed to Create Res. Not Find By ResSearchKeys:" + resSearchKeys); return(null); } return(retRes); }
public void Add2Load(List <string> list) { if (list == null) { return; } for (var i = list.Count - 1; i >= 0; --i) { var resSearchRule = ResSearchKeys.Allocate(list[i]); Add2Load(resSearchRule); resSearchRule.Recycle2Cache(); } }
// Use this for initialization void Start() { // 添加创建器 ResFactory.AddResCreator <MyResCreator>(); var resLoader = ResLoader.Allocate(); var resSearchKeys = ResSearchKeys.Allocate("myres://hello_world"); var myRes = resLoader.LoadResSync(resSearchKeys); resSearchKeys.Recycle2Cache(); Debug.Log(myRes.AssetName); Debug.Log(myRes.State); }
public AssetData GetAssetData(ResSearchKeys resSearchRule) { AssetData result = null; if (resSearchRule.OwnerBundle != null && mUUID4AssetData != null) { return(mUUID4AssetData.TryGetValue(resSearchRule.OwnerBundle + resSearchRule.AssetName, out result) ? result : null); } if (resSearchRule.OwnerBundle == null && mAssetDataMap != null) { return(mAssetDataMap.TryGetValue(resSearchRule.AssetName, out result) ? result : null); } return(result); }
public AssetData GetAssetData(ResSearchKeys resSearchKeys) { if (mAssetDataTable == null) { mAssetDataTable = new AssetDataTable(); for (var i = mAllAssetDataGroup.Count - 1; i >= 0; --i) { foreach (var assetData in mAllAssetDataGroup[i].AssetDatas) { mAssetDataTable.Add(assetData); } } } return(mAssetDataTable.GetAssetDataByResSearchKeys(resSearchKeys)); }
private void Add2Load(ResSearchKeys resSearchKeys, Action <bool, IRes> listener = null, bool lastOrder = true) { var res = FindResInArray(mResList, resSearchKeys); if (res != null) { if (listener != null) { AddResListenerRecord(res, listener); res.RegisteOnResLoadDoneEvent(listener); } return; } res = ResMgr.Instance.GetRes(resSearchKeys, true); if (res == null) { return; } if (listener != null) { AddResListenerRecord(res, listener); res.RegisteOnResLoadDoneEvent(listener); } //无论该资源是否加载完成,都需要添加对该资源依赖的引用 var depends = res.GetDependResList(); if (depends != null) { foreach (var depend in depends) { var searchRule = ResSearchKeys.Allocate(depend, null, typeof(AssetBundle)); Add2Load(searchRule); searchRule.Recycle2Cache(); } } AddRes2Array(res, lastOrder); }
private static IRes FindResInArray(List <IRes> list, ResSearchKeys resSearchKeys) { if (list == null) { return(null); } for (var i = list.Count - 1; i >= 0; --i) { if (resSearchKeys.Match(list[i])) { return(list[i]); } } return(null); }
public void ReleaseRes(string resName) { if (string.IsNullOrEmpty(resName)) { return; } #if UNITY_EDITOR if (AssetBundleSettings.SimulateAssetBundleInEditor) { if (mCachedSpriteDict.ContainsKey(resName)) { var sprite = mCachedSpriteDict[resName]; GameObject.Destroy(sprite); mCachedSpriteDict.Remove(resName); } } #endif var resSearchRule = ResSearchKeys.Allocate(resName); var res = ResMgr.Instance.GetRes(resSearchRule); resSearchRule.Recycle2Cache(); if (res == null) { return; } if (mWaitLoadList.Remove(res)) { --mLoadingCount; if (mLoadingCount == 0) { mListener = null; } } if (mResList.Remove(res)) { res.UnRegisteOnResLoadDoneEvent(OnResLoadFinish); res.Release(); ResMgr.Instance.ClearOnUpdate(); } }
public void ReleaseRes(string resName) { if (string.IsNullOrEmpty(resName)) { return; } if (FromUnityToDll.Setting.SimulationMode) { if (mCachedSpriteDict.ContainsKey(resName)) { var sprite = mCachedSpriteDict[resName]; Object.Destroy(sprite); mCachedSpriteDict.Remove(resName); } } var resSearchRule = ResSearchKeys.Allocate(resName); var res = ResMgr.Instance.GetRes(resSearchRule); resSearchRule.Recycle2Cache(); if (res == null) { return; } if (mWaitLoadList.Remove(res)) { --mLoadingCount; if (mLoadingCount == 0) { mListener = null; } } if (mResList.Remove(res)) { res.UnRegisteOnResLoadDoneEvent(OnResLoadFinish); res.Release(); ResMgr.Instance.ClearOnUpdate(); } }
public IRes GetResBySearchKeys(ResSearchKeys resSearchKeys) { var assetName = resSearchKeys.AssetName; var reses = NameIndex .Get(assetName); if (resSearchKeys.AssetType != null) { reses = reses.Where(res => res.AssetType == resSearchKeys.AssetType); } if (resSearchKeys.OwnerBundle != null) { reses = reses.Where(res => res.OwnerBundleName == resSearchKeys.OwnerBundle); } return(reses.FirstOrDefault()); }
public AsyncOperation LoadAsync(string sceneName, LoadSceneMode loadSceneMode = LoadSceneMode.Single, System.Action listener = null) { mListener = listener; var resSearchRule = ResSearchKeys.Allocate(sceneName); if (ResFactory.AssetBundleSceneResCreator.Match(resSearchRule)) { //加载的为场景 IRes res = ResFactory.AssetBundleSceneResCreator.Create(resSearchRule); #if UNITY_EDITOR if (FromUnityToDll.Setting.SimulationMode) { string path = UnityEditor.AssetDatabase.GetAssetPathsFromAssetBundle((res as AssetBundleSceneRes).AssetBundleName)[0]; if (!path.IsNullOrEmpty()) { LoadSceneParameters sceneParameters = new LoadSceneParameters(); sceneParameters.loadSceneMode = loadSceneMode; tempDepends.Clear(); return(UnityEditor.SceneManagement.EditorSceneManager.LoadSceneAsyncInPlayMode(path, sceneParameters)); } } else { DoLoadAsync(); tempDepends.Clear(); return(SceneManager.LoadSceneAsync(sceneName, loadSceneMode)); } #else DoLoadAsync(); tempDepends.Clear(); return(SceneManager.LoadSceneAsync(sceneName, loadSceneMode)); #endif } else { Log.E("场景名称错误!请检查名称是否正确或资源是否被标记!AssetName:" + sceneName); } return(null); }
public IRes LoadResSync(ResSearchKeys resSearchKeys) { Add2Load(resSearchKeys); LoadSync(); var res = ResMgr.Instance.GetRes(resSearchKeys, false); if (res == null) { Log.E("Failed to Load Res:" + resSearchKeys); return(null); } else { //清理缓存的依赖资源名称 tempDepends.Clear(); } return(res); }
public ABUnit GetABUnit(string assetName) { var resSearchRule = ResSearchKeys.Allocate(assetName); AssetData data = GetAssetData(resSearchRule); resSearchRule.Recycle2Cache(); if (data == null) { return(null); } if (mABUnitArray == null) { return(null); } return(mABUnitArray[data.AssetBundleIndex]); }
protected void UnHoldDependRes() { var depends = GetDependResList(); if (depends == null || depends.Length == 0) { return; } for (var i = depends.Length - 1; i >= 0; --i) { var resSearchRule = ResSearchKeys.Allocate(depends[i]); var res = ResMgr.Instance.GetRes(resSearchRule, false); resSearchRule.Recycle2Cache(); if (res != null) { res.Release(); } } }
public bool IsDependResLoadFinish() { var depends = GetDependResList(); if (depends == null || depends.Length == 0) { return(true); } for (var i = depends.Length - 1; i >= 0; --i) { var resSearchRule = ResSearchKeys.Allocate(depends[i]); var res = ResMgr.Instance.GetRes(resSearchRule, false); resSearchRule.Recycle2Cache(); if (res == null || res.State != ResState.Ready) { return(false); } } return(true); }
public IRes GetRes(ResSearchKeys resSearchKeys, bool createNew = false) { var res = mTable.GetResBySearchKeys(resSearchKeys); if (res != null) { return(res); } if (!createNew) { Log.I("createNew:{0}", createNew); return(null); } res = ResFactory.Create(resSearchKeys); if (res != null) { mTable.Add(res); } return(res); }
/// <summary> /// ID:RKRL003 只通过资源名字进行同步加载 ResLoader.LoadSync<T>(string assetName) /// </summary> /// <param name="assetName">资源名字</param> /// <typeparam name="T"></typeparam> /// <returns></returns> public T LoadSync <T>(string assetName) where T : Object { if (typeof(T) == typeof(Sprite)) { if (FromUnityToDll.Setting.SimulationMode) { return(LoadSprite(assetName) as T); } else { var resSearchKeys = ResSearchKeys.Allocate(assetName, null, typeof(T)); var retAsset = LoadResSync(resSearchKeys); resSearchKeys.Recycle2Cache(); return(retAsset.Asset as T); } } else { var resSearchKeys = ResSearchKeys.Allocate(assetName, null, typeof(T)); var retAsset = LoadResSync(resSearchKeys); resSearchKeys.Recycle2Cache(); return(retAsset.Asset as T); } }
public bool Match(ResSearchKeys resSearchKeys) { return(resSearchKeys.AssetName.StartsWith("localimage:")); }
public T GetRes <T>(ResSearchKeys resSearchKeys) where T : class, IRes { return(GetRes(resSearchKeys) as T); }
public IRes Create(ResSearchKeys resSearchKeys) { return(AssetBundleRes.Allocate(resSearchKeys.AssetName)); }
public bool Match(ResSearchKeys resSearchKeys) { return(resSearchKeys.AssetType == typeof(AssetBundle)); }
public override bool LoadSync() { if (!CheckLoadAble()) { return(false); } if (string.IsNullOrEmpty(AssetBundleName)) { return(false); } Object obj = null; if (FromUnityToDll.Setting.SimulationMode && !string.Equals(mAssetName, "assetbundlemanifest")) { var resSearchKeys = ResSearchKeys.Allocate(AssetBundleName, null, typeof(AssetBundle)); var abR = ResMgr.Instance.GetRes <AssetBundleRes>(resSearchKeys); resSearchKeys.Recycle2Cache(); var assetPaths = FromUnityToDll.Setting.GetAssetPathsFromAssetBundleAndAssetName(abR.AssetName, mAssetName); if (assetPaths.Length == 0) { Log.E("Failed Load Asset:" + mAssetName); OnResLoadFaild(); return(false); } HoldDependRes(); State = ResState.Loading; if (AssetType != null) { obj = FromUnityToDll.Setting.LoadAssetAtPath(assetPaths[0], AssetType); } else { obj = FromUnityToDll.Setting.LoadAssetAtPath <Object>(assetPaths[0]); } } else { var resSearchKeys = ResSearchKeys.Allocate(AssetBundleName, null, typeof(AssetBundle)); var abR = ResMgr.Instance.GetRes <AssetBundleRes>(resSearchKeys); resSearchKeys.Recycle2Cache(); if (abR == null || !abR.AssetBundle) { Log.E("Failed to Load Asset, Not Find AssetBundleImage:" + AssetBundleName); return(false); } HoldDependRes(); State = ResState.Loading; if (AssetType != null) { obj = abR.AssetBundle.LoadAsset(mAssetName, AssetType); } else { obj = abR.AssetBundle.LoadAsset(mAssetName); } } UnHoldDependRes(); if (obj == null) { Log.E("Failed Load Asset:" + mAssetName + ":" + AssetType + ":" + AssetBundleName); OnResLoadFaild(); return(false); } mAsset = obj; State = ResState.Ready; return(true); }
public IRes Create(ResSearchKeys resSearchKeys) { return(new MyRes(resSearchKeys.AssetName)); }
public IRes Create(ResSearchKeys resSearchKeys) { return(NetImageRes.Allocate(resSearchKeys.AssetName, resSearchKeys.OriginalAssetName)); }
public bool Match(ResSearchKeys resSearchKeys) { return(resSearchKeys.AssetName.StartsWith("myres://")); }
public IRes Create(ResSearchKeys resSearchKeys) { return(LocalImageRes.Allocate(resSearchKeys.AssetName)); }
public override IEnumerator DoLoadAsync(System.Action finishCallback) { if (RefCount <= 0) { OnResLoadFaild(); finishCallback(); yield break; } //Object obj = null; var resSearchKeys = ResSearchKeys.Allocate(AssetBundleName, null, typeof(AssetBundle)); var abR = ResMgr.Instance.GetRes <AssetBundleRes>(resSearchKeys); resSearchKeys.Recycle2Cache(); if (FromUnityToDll.Setting.SimulationMode && !string.Equals(mAssetName, "assetbundlemanifest")) { var assetPaths = FromUnityToDll.Setting.GetAssetPathsFromAssetBundleAndAssetName(abR.AssetName, mAssetName); if (assetPaths.Length == 0) { Log.E("Failed Load Asset:" + mAssetName); OnResLoadFaild(); finishCallback(); yield break; } //确保加载过程中依赖资源不被释放:目前只有AssetRes需要处理该情况 HoldDependRes(); State = ResState.Loading; // 模拟等一帧 yield return(new WaitForEndOfFrame()); UnHoldDependRes(); if (AssetType != null) { mAsset = FromUnityToDll.Setting.LoadAssetAtPath(assetPaths[0], AssetType); } else { mAsset = FromUnityToDll.Setting.LoadAssetAtPath <Object>(assetPaths[0]); } } else { if (abR == null || abR.AssetBundle == null) { Log.E("Failed to Load Asset, Not Find AssetBundleImage:" + AssetBundleName); OnResLoadFaild(); finishCallback(); yield break; } HoldDependRes(); State = ResState.Loading; AssetBundleRequest abQ = null; if (AssetType != null) { abQ = abR.AssetBundle.LoadAssetAsync(mAssetName, AssetType); mAssetBundleRequest = abQ; yield return(abQ); } else { abQ = abR.AssetBundle.LoadAssetAsync(mAssetName); mAssetBundleRequest = abQ; yield return(abQ); } mAssetBundleRequest = null; UnHoldDependRes(); if (!abQ.isDone) { Log.E("Failed Load Asset:" + mAssetName); OnResLoadFaild(); finishCallback(); yield break; } mAsset = abQ.asset; } State = ResState.Ready; finishCallback(); }