// 这个简单一点,就不加正在加载的判断了。 IEnumerator RealLoadResource(string resName, Type type, OnResourceLoaded onLoaded) { // 直接从Resource 里面加载 ResourceRequest request = Resources.LoadAsync(resName, type); yield return(request); onLoaded(request.asset); }
public static List <CsvRow> ParseCSV(string strContent, OnResourceLoaded onResourceLoaded = null, bool isRequest = false) { string text = strContent; List <CsvRow> rows = ParseText(text); if (null != onResourceLoaded) { onResourceLoaded(rows); } return(rows); }
IEnumerator LoadAssetBundle(string assName, string resName, Type type, OnResourceLoaded onLoaded) { yield return(m_helper.TryStartCoroutine(RealLoadAsseBundle(assName, false))); // wait all dependcies over ---- AssetBundleInfo _info = null; while ((_info = GetLoadedAssetBundle(assName)) == null) { yield return(0); } // load object and call function------- m_helper.TryStartCoroutine(LoadAsset(_info, resName, type, onLoaded)); }
public virtual async UniTask <IReadOnlyCollection <Resource <TResource> > > LoadAllAsync(string path = null) { var result = new List <Resource <TResource> >(); var addedPaths = new HashSet <string>(); var loadTasks = new List <UniTask <Resource <TResource> > >(); var loadData = new Dictionary <string, (ProvisionSource, string)>(); foreach (var source in ProvisionSources) { var fullPath = source.BuildFullPath(path); var locatedResourcePaths = await source.Provider.LocateResourcesAsync <TResource>(fullPath); foreach (var locatedResourcePath in locatedResourcePaths) { var localPath = source.BuildLocalPath(locatedResourcePath); if (addedPaths.Contains(localPath)) { continue; } else { addedPaths.Add(localPath); } if (IsLoaded(localPath)) { result.Add(GetLoadedOrNull(localPath)); continue; } loadTasks.Add(source.Provider.LoadResourceAsync <TResource>(locatedResourcePath)); loadData[locatedResourcePath] = (source, localPath); } } var resources = await UniTask.WhenAll(loadTasks); foreach (var resource in resources) { var(source, localPath) = loadData[resource.Path]; LoadedResources.Add(new LoadedResource(resource, source)); OnResourceLoaded?.Invoke(localPath); result.Add(resource); } return(result); }
public static void LoadResource(string assetPath, ResourcePathType pathType, OnResourceLoaded onResourceLoaded) { if (pathType == ResourcePathType.Resource) { UnityEngine.Object obj = Resources.Load(assetPath); if (onResourceLoaded != null) { onResourceLoaded(obj); } } else if (pathType == ResourcePathType.Persistant) { WaitLoadStruct tStruct = new WaitLoadStruct(); tStruct.assetPath = assetPath; tStruct.onResourceLoaded = onResourceLoaded; waitToLoadList.Add(tStruct); } }
// just like LoadResource("ui_hero","ui_hero",GameObject,onLoaded); LoadResource("ui_hero","ui_hero",GameObject,onLoaded); public void LoadResource(string assName, string resName, Type type, OnResourceLoaded onLoaded) { // add a request ----- if (string.IsNullOrEmpty(assName)) { // load resource --- m_helper.TryStartCoroutine(RealLoadResource(resName, type, onLoaded)); } else // load asset { // 如果loaded 了----- 是否应该直接load 呢--- i think so -------- 写到里面可以统一,似乎,回头再想想 --- AssetBundleInfo ab = GetLoadedAssetBundle(assName); if (ab != null) { m_helper.TryStartCoroutine(LoadAsset(ab, resName, type, onLoaded)); return; } LoadAssetRequest request = m_loadRequestPool.Get(); request.assetType = type; request.resName = resName; request.onLoaded = onLoaded; XList <LoadAssetRequest> requests = null; if (!m_LoadRequests.TryGetValue(assName, out requests)) { requests = GetRequestList(); requests.Add(request); m_LoadRequests.Add(assName, requests); m_helper.TryStartCoroutine(LoadAssetBundle(assName, resName, type, onLoaded)); } else { requests.Add(request); } } }
public virtual async UniTask <Resource <TResource> > LoadAsync(string path) { if (IsLoaded(path)) { return(GetLoadedOrNull(path)); } foreach (var source in ProvisionSources) { var fullPath = source.BuildFullPath(path); if (!await source.Provider.ResourceExistsAsync <TResource>(fullPath)) { continue; } var resource = await source.Provider.LoadResourceAsync <TResource>(fullPath); LoadedResources.Add(new LoadedResource(resource, source)); OnResourceLoaded?.Invoke(path); return(resource); } return(Resource <TResource> .Invalid); }
private static void Internal_onResourceLoaded(RRefBase p0) { OnResourceLoaded?.Invoke(p0); }
public void OnPush() { assetType = null; resName = ""; onLoaded = null; }
IEnumerator LoadAsset(AssetBundleInfo assetBundle, string resName, Type type, OnResourceLoaded onLoaded) { if (assetBundle == null || assetBundle.GetAssetBundle() == null) { onLoaded(null); yield break; } AssetBundleRequest request = assetBundle.GetAssetBundle().LoadAssetAsync(resName, type); yield return(request); onLoaded(request.asset); assetBundle.AddReferenceCount(); }