コード例 #1
0
ファイル: Enter.cs プロジェクト: altniu/ILRuntime_HotGames
    private void InitRemoteConfig()
    {
        SetJindu("正在检查本地资源版本,请稍候");

        AOutput.Log("InitRemoteConfig");
        ConfigDownloader.Instance.StartToDownload(ConfigURL, () =>
        {
            ParseConfigs();
            if (UConfigManager.bUsingAb)
            {
                SetJindu("正在加载脚本资源......");
                StartCoroutine(OnDownloadDll(ConfigDownloader.Instance.OnGetValue("dll")));
            }
            else
            {
                SetJindu("正在加载脚本资源...");
                LoadDll(File.ReadAllBytes("Assets/RemoteResources/Dll/ahotgames.bytes")
                        , File.ReadAllBytes("Assets/RemoteResources/Dll/ahotgames.pdb"));
            }
        }, () =>
        {
            SetJindu("正在加载本地资源,请稍候");
            Debug.Log("下载远端配置文件失败,加载本地文件");
            UConfigManager.bUsingAb = false;
            StartCoroutine(OnDownloadDll(UStaticFuncs.GetStreamAssetPath() + UStaticFuncs.GetPlatformFolder(Application.platform) + "/dll/ahotgames.ab"));
        });
    }
コード例 #2
0
    private AssetBundle DoGetAssetBundle(string assetBundlePath)
    {
        if (dAssetBundles.ContainsKey(assetBundlePath))
        {
            return(dAssetBundles[assetBundlePath]);
        }
        var path = UStaticFuncs.ConfigSaveDir + "/" + assetBundlePath;

        if (!File.Exists(path))
        {
            return(null);
        }
        var ab = AssetBundle.LoadFromFile(path);

        if (ab == null)
        {
            return(null);
        }
        dAssetBundles.Add(assetBundlePath, ab);
        var depends = OnGetAssetBundleDependeces(UStaticFuncs.GetAssetBundleName(assetBundlePath));

        foreach (var d in depends)
        {
            OnGetAssetBundle(assetBundlePath);
        }
        return(ab);
    }
コード例 #3
0
    internal void OnUnloadAssetBundles()
    {
        if (!Enter.bUsingAb)
        {
            return;
        }
        var dep = OnGetAssetBundleDependeces("ui/uiloading.ab").ToList();

        dep.Add(UStaticFuncs.GetPlatformFolder(Application.platform));
        var remove = new List <string>();

        foreach (var d in dAssetBundles)
        {
            if (dep.Contains(d.Key))
            {
                continue;
            }
            d.Value.Unload(true);
            remove.Add(d.Key);
        }
        foreach (var r in remove)
        {
            dAssetBundles.Remove(r);
        }
    }
コード例 #4
0
    private void InitObjs()
    {
        var Objs  = UStaticFuncs.FindChild(gameObj.transform, "Objs");
        var aobjs = new List <Transform>();

        for (var i = 0; i < Objs.childCount; i++)
        {
            aobjs.Add(Objs.GetChild(i));
        }

        var ixcount = UnityEngine.Random.Range(20, 30);
        var iycount = UnityEngine.Random.Range(20, 30);

        for (var i = 1; i <= ixcount; i++)
        {
            for (var j = 1; j <= iycount; j++)
            {
                var obj = aobjs[UnityEngine.Random.Range(0, aobjs.Count)];
                var x   = (i - 10) * 10 + UnityEngine.Random.Range(0, 10);
                var z   = (j - 10) * 10 + UnityEngine.Random.Range(0, 10);
                obj = GameObject.Instantiate(obj, Role.parent);
                obj.localPosition = new Vector3(x, obj.localPosition.y, z);
            }
        }
    }
コード例 #5
0
    private void Start()
    {
#if UNITY_ANDROID
        MonoInstancePool.getInstance <SDK_Orientation>(true).ShowBar();
#endif
        Screen.fullScreen = true;
        MonoInstancePool.getInstance <AntiScriptSplit>(true);
        MonoInstancePool.getInstance <SDK_WeChat>(true);

        trUIAlert   = UStaticFuncs.FindChildComponent <Transform>(transform, "UIAlert");
        fprocessing = 0.1f;
#if UNITY_IOS
        MonoInstancePool.getInstance <SDK_AppleInApp>(true);
#endif

        gameObject.AddComponent <UConsoleDebug>();
#if !UNITY_WEBGL
        var fa = "fa" + Utils_Plugins.Util_GetBundleVersion();
        if (!PlayerPrefs.HasKey(fa))
        {
            AOutput.Log($"start copy files {fa}");
            MonoInstancePool.getInstance <UCopyFilesFromStreamingAssets>().OnCopy("versions.txt", UStaticFuncs.ConfigSaveDir, () =>
            {
                InitRemoteConfig();
                PlayerPrefs.SetInt("fa" + Utils_Plugins.Util_GetBundleVersion(), 1);
            });
        }
        else
        {
#endif
        InitRemoteConfig();
#if !UNITY_WEBGL
    }
#endif
    }
コード例 #6
0
    protected void RegistButtonAction(string buttonName, Action clickAction)
    {
        var btn = UStaticFuncs.FindChildComponent <Button>(transform, buttonName);

        if (btn != null)
        {
            btn.onClick.AddListener(() => { clickAction(); });
        }
    }
コード例 #7
0
    protected void ShowWidget(string widgetName, bool bShow)
    {
        var w = UStaticFuncs.FindChildComponent <Component>(gameObj.transform, widgetName);

        if (w != null)
        {
            w.gameObject.SetActive(bShow);
        }
    }
コード例 #8
0
    public string[] OnGetAssetBundleDependeces(string name, List <string> dependens = null)
    {
        if (!dAssetBundles.ContainsKey(UStaticFuncs.GetPlatformFolder(Application.platform)))
        {
            return(new string[] { });
        }
        if (manifestBundle == null)
        {
            manifestBundle = dAssetBundles[UStaticFuncs.GetPlatformFolder(Application.platform)];
        }
        if (manifest == null)
        {
            manifest = (AssetBundleManifest)manifestBundle.LoadAsset("AssetBundleManifest");
        }
        var total = dependens;

        if (dependens != null)
        {
            foreach (var d in dependens)
            {
                if (!total.Contains(d))
                {
                    total.Add(d);
                }
            }
        }
        else
        {
            total = new List <string>();
        }
        var result = manifest.GetAllDependencies(name);

        foreach (var d in result)
        {
            if (!total.Contains(d))
            {
                total.Add(d);
            }
        }
        foreach (var r in result)
        {
            if (dependens != null && dependens.Contains(r))
            {
                continue;
            }
            var deps = OnGetAssetBundleDependeces(r, total);
            foreach (var d in deps)
            {
                if (!total.Contains(d))
                {
                    total.Add(d);
                }
            }
        }
        return(total.ToArray());
    }
コード例 #9
0
    protected override void InitComponents()
    {
        Content    = UStaticFuncs.FindChildComponent <Text>(transform, "Content");
        btnConfirm = UStaticFuncs.FindChildComponent <Button>(transform, "btnConfirm");
        btnCancel  = UStaticFuncs.FindChildComponent <Button>(transform, "btnCancel");
        btnConfirm.onClick.AddListener(OnConfirm);
        btnCancel.onClick.AddListener(OnCancel);

        DontDestroyOnLoad(gameObject);
    }
コード例 #10
0
    public T FindWidgetWithPath <T>(Transform trans, string widgetName) where T : Component
    {
        var t = UStaticFuncs.FindChildComponent <T>(trans, widgetName);

        if (t == null)
        {
            AOutput.Log("FindWidget failed " + widgetName);
        }
        return(t);
    }
コード例 #11
0
 protected void OnRegistButtonActions()
 {
     OnRegistAction((msg) =>
     {
         if (!dButtons.ContainsKey(msg))
         {
             return;
         }
         UStaticFuncs.EmitButtonClick(dButtons[msg]);
     });
 }
コード例 #12
0
    protected void ChangeButtonText(string buttonName, string buttonText)
    {
        var btn = UStaticFuncs.FindChildComponent <Button>(transform, buttonName);

        if (btn == null)
        {
            return;
        }
        var t = btn.GetComponentInChildren <Text>();

        t.text = buttonText;
    }
コード例 #13
0
    protected void ShowWidget(Transform tr, string widgetName, bool bShow)
    {
        if (tr == null)
        {
            return;
        }
        var w = UStaticFuncs.FindChildComponent <Component>(tr, widgetName);

        if (w != null)
        {
            w.gameObject.SetActive(bShow);
        }
    }
コード例 #14
0
    protected override void InitComponents()
    {
        usernameInput = UStaticFuncs.FindChildComponent <InputField>(transform, "username");
        passwordInput = UStaticFuncs.FindChildComponent <InputField>(transform, "username");
        btnLogin      = UStaticFuncs.FindChildComponent <Button>(transform, "Login");

        btnLogin.onClick.AddListener(
            delegate()
        {
            string username = usernameInput.text;
            string password = passwordInput.text;
            //do login
        });
    }
コード例 #15
0
    public T OnLoadAsset <T>(string assetBundlePath) where T : UnityEngine.Object
    {
        T prefab = null;

#if UNITY_EDITOR
        if (!UConfigManager.bUsingAb)
        {
            prefab = UnityEditor.AssetDatabase.LoadAssetAtPath("Assets/RemoteResources/" + assetBundlePath, typeof(T)) as T;
            if (prefab != null)
            {
                return(prefab);
            }
            if (assetBundlePath.Contains("."))
            {
                assetBundlePath = assetBundlePath.Substring(0, assetBundlePath.LastIndexOf("."));
            }
        }
#endif
        if (!UConfigManager.bUsingAb)
        {
            prefab = Resources.Load <T>(assetBundlePath);
        }
        if (prefab)
        {
            return(prefab);
        }

        assetBundlePath = assetBundlePath.ToLower();
        var assetName = UStaticFuncs.GetAssetBundleName(assetBundlePath);
        if (dAssets.ContainsKey(assetName) && dAssets[assetName] != null && dAssets[assetName] is T)
        {
            return(dAssets[assetName] as T);
        }
        var deps = OnGetAssetBundleDependeces(assetBundlePath + AssetBundleSuffix);
        foreach (var dep in deps)
        {
            OnGetAssetBundle(UStaticFuncs.GetAssetBundleName(dep));
        }
        var ab = OnGetAssetBundle(assetBundlePath);
        if (ab == null)
        {
            return(Resources.Load <T>(assetBundlePath));
        }
        var t = ab.LoadAsset <T>(assetName);
        dAssets.Add(assetName, t);
        return(t);
    }
コード例 #16
0
    private void Start()
    {
        ConfigDownloader.Instance.StartToDownload(ConfigURL, () =>
        {
            ParseConfigs();

            Debug.Log("UConfigManager.bUsingAb " + UConfigManager.bUsingAb);

            UAssetBundleDownloader.Instance.DownloadResources((l1) =>
            {
                UAssetBundleDownloader.Instance.DownloadResources((l2) =>
                {
                    var dll         = "Dll/AHotGames";
                    byte[] pdbBytes = null;
#if UNITY_EDITOR
                    if (!UConfigManager.bUsingAb)
                    {
                        dll += ".bytes";
                    }
                    pdbBytes = System.IO.File.ReadAllBytes("Assets/RemoteResources/Dll/AHotGames.pdb");
#endif
                    ILRuntimeHandler.Instance.DoLoadDll("ahotmages"
                                                        , UAssetBundleDownloader.Instance.OnLoadAsset <TextAsset>(dll).bytes, pdbBytes);

                    ILRuntimeHandler.Instance.SetUnityMessageReceiver(MonoInstancePool.getInstance <UEmitMessage>(true).gameObject);

                    ILRuntimeHandler.Instance.OnLoadClass("AEntrance", new GameObject("AEntrance"));
                }
                                                                  , null, (arg) =>
                {
                    var preloads  = ConfigDownloader.Instance.OnGetValue("preloads");
                    var lPreloads = preloads.Split(',').ToList();
                    foreach (var p in lPreloads)
                    {
                        if (arg.ToLower().StartsWith(p.ToLower()))
                        {
                            return(true);
                        }
                    }
                    return(false);
                });
            }
                                                              , null, null, true, UStaticFuncs.GetPlatformFolder(Application.platform)
                                                              , UStaticFuncs.GetPlatformFolder(Application.platform) + ".manifest");
        }, () => { Debug.LogError("下载配置文件失败。"); });
    }
コード例 #17
0
    public void DownloadConfig(Action downloadConfigComplete)
    {
        //UILoading.SetLoadingContent("正在加载远端配置表。");
        UAssetBundleDownloader.Instance.DownloadResources((list) =>
        {
            foreach (var str in list)
            {
                var assetName = UStaticFuncs.GetAssetBundleName(str);
                if (!dExcelLoaders.ContainsKey(assetName))
                {
                    continue;
                }
                dExcelLoaders[assetName](UAssetBundleDownloader.Instance.OnLoadAsset <TextAsset>(str).text);
            }

            downloadConfigComplete?.Invoke();
        }
                                                          , null, filter, dExcelLoaders.Keys.ToArray());
    }
コード例 #18
0
ファイル: Enter.cs プロジェクト: altniu/ILRuntime_HotGames
    private void InitProgressSlider()
    {
        UILoading = UAssetBundleDownloader.Instance.OnLoadAsset <Transform>("ui/uiloading");
        Debug.Log($"UILoading {UILoading}");
        if (UILoading == null)
        {
            UILoading = UStaticFuncs.FindChildComponent <Transform>(transform, "UILoading");
        }
        if (UILoading != null)
        {
            UILoading.gameObject.SetActive(true);

            UILoading.GetComponent <Canvas>().sortingOrder = -1;
            SliderProgress = UStaticFuncs.FindChildComponent <Image>(UILoading, "SliderProgress");
            textProgress   = UStaticFuncs.FindChildComponent <Text>(UILoading, "textProgress");
            jindu          = UStaticFuncs.FindChildComponent <Text>(UILoading, "jindu");
            SetJindu("正在初始化,请稍候");
        }
    }
コード例 #19
0
    protected override void InitComponents()
    {
        var btnQuit = FindWidget <Button>("btnQuit");

        btnQuit.onClick.AddListener(() =>
        {
            UnloadThis();

            LoadAnotherUI <UIMain>();
        });

        Role = UStaticFuncs.FindChild(gameObj.transform, "Role");

        var LegL = UStaticFuncs.FindChild(gameObj.transform, "LegL");
        var LegR = UStaticFuncs.FindChild(gameObj.transform, "LegR");

        InitObjs();

        const float rotateSpeed = 20;
        const float moveSpeed   = 2;
        var         updater     = gameObj.AddComponent <UUpdater>();

        updater.onUpdate += () =>
        {
            if (Input.GetKey(KeyCode.A))
            {
                Role.transform.Rotate(Vector3.down * Time.deltaTime * rotateSpeed);
            }
            if (Input.GetKey(KeyCode.D))
            {
                Role.transform.Rotate(Vector3.up * Time.deltaTime * rotateSpeed);
            }
            if (Input.GetKey(KeyCode.W))
            {
                Role.transform.Translate(Vector3.forward * Time.deltaTime * moveSpeed);
            }
            if (Input.GetKey(KeyCode.S))
            {
                Role.transform.Translate(Vector3.back * Time.deltaTime * moveSpeed);
            }
        };
    }
コード例 #20
0
 public string OnGetValue(string skey)
 {
     if (dKeyValue.ContainsKey($"{skey}{UStaticFuncs.GetPlatformFolder(Application.platform)}{Utils_Plugins.Util_GetBundleVersion()}"))
     {
         return(dKeyValue[$"{skey}{UStaticFuncs.GetPlatformFolder(Application.platform)}{Utils_Plugins.Util_GetBundleVersion()}"]);
     }
     if (dKeyValue.ContainsKey($"{skey}{UStaticFuncs.GetPlatformFolder(Application.platform)}"))
     {
         return(dKeyValue[$"{skey}{UStaticFuncs.GetPlatformFolder(Application.platform)}"]);
     }
     if (dKeyValue.ContainsKey($"{skey}{Utils_Plugins.Util_GetBundleVersion()}"))
     {
         return(dKeyValue[$"{skey}{Utils_Plugins.Util_GetBundleVersion()}"]);
     }
     if (dKeyValue.ContainsKey(skey))
     {
         return(dKeyValue[skey]);
     }
     return("");
 }
コード例 #21
0
    private IEnumerator DoLoadFileList(string fileListName)
    {
        lfiles.Clear();
        var www = new WWW(UStaticFuncs.GetStreamAssetPath() + UStaticFuncs.GetPlatformFolder(Application.platform) + "/" + fileListName);

        yield return(www);

        if (string.IsNullOrEmpty(www.error))
        {
            var atext = www.text.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
            foreach (var t in atext)
            {
                var fname = "";
                var av    = t.Split('|');
                if (av.Length <= 2)
                {
                    continue;
                }
                fname = av[0];
                if (fname.StartsWith("/") || fname.StartsWith("\\"))
                {
                    fname = fname.Substring(1);
                }
                fname = fname.Replace("\\", "/");
                if (fname.EndsWith(".meta"))
                {
                    continue;
                }
                lfiles.Add(fname);
            }

            totalCount = lfiles.Count;

            OnCopyFile();
        }
        else
        {
            AOutput.Log("DoCopyFile failed:" + www.error + " for file " + www.url);
            actionOnComp?.Invoke();
        }
    }
コード例 #22
0
    public T FindWidgetWithPath <T>(string widgetNameWithPath) where T : Component
    {
        var parent     = transform;
        var widgetName = widgetNameWithPath;

        widgetNameWithPath = widgetNameWithPath.Replace("\\", "/");
        if (widgetNameWithPath.Contains("/"))
        {
            var alayers = widgetNameWithPath.Split('/');
            widgetName = alayers[alayers.Length - 1];
            for (var i = 0; i < alayers.Length - 1; i++)
            {
                var tr = FindWidgetWithPath <Transform>(parent, alayers[i]);
                if (tr == null)
                {
                    break;
                }
                parent = tr;
            }
        }
        return(UStaticFuncs.FindChildComponent <T>(parent, widgetName));
    }
コード例 #23
0
    private IEnumerator DoCopyFile(string fname)
    {
        var www = new WWW(UStaticFuncs.GetStreamAssetPath() + UStaticFuncs.GetPlatformFolder(Application.platform) + "/" + fname);

        yield return(www);

        if (string.IsNullOrEmpty(www.error))
        {
            var finfo = new FileInfo(UStaticFuncs.ConfigSaveDir + fname);
            if (!finfo.Directory.Exists)
            {
                finfo.Directory.Create();
            }
            System.IO.File.WriteAllBytes(finfo.FullName, www.bytes);
        }
        else
        {
            AOutput.Log("DoCopyFile failed:" + www.error + " for file " + www.url);
        }
        AOutput.Log("正在释放资源,不消耗流量。");
        OnCopyFile();
    }
コード例 #24
0
ファイル: Enter.cs プロジェクト: soulhez/ILRuntime_HotGames
    private void Start()
    {
        ConfigDownloader.Instance.StartToDownload(ConfigURL, () =>
        {
            UAssetBundleDownloader.Instance.DownloadResources((l1) =>
            {
                UAssetBundleDownloader.Instance.DownloadResources((l2) =>
                {
                    var dll = "Dll/AHotGames";
#if UNITY_EDITOR
                    dll += ".bytes";
#endif
                    ILRuntimeHandler.Instance.DoLoadDll("ahotmages", UAssetBundleDownloader.Instance.OnLoadAsset <TextAsset>(dll).bytes);
                    ILRuntimeHandler.Instance.SetUnityMessageReceiver(MonoInstancePool.getInstance <UEmitMessage>(true).gameObject);

                    ILRuntimeHandler.Instance.OnLoadClass("AEntrance", new GameObject("AEntrance"));
                }
                                                                  , null, (arg) => { return(arg.Contains("dll/")); }, true);
            }
                                                              , null, null, true, UStaticFuncs.GetPlatformFolder(Application.platform)
                                                              , UStaticFuncs.GetPlatformFolder(Application.platform) + ".manifest");
        }, () => { Debug.LogError("下载配置文件失败。"); });
    }
コード例 #25
0
 public AssetBundle OnGetAssetBundle(string assetBundlePath, bool NoDependences = false)
 {
     if (!assetBundlePath.EndsWith(AssetBundleSuffix))
     {
         assetBundlePath += AssetBundleSuffix;
     }
     assetBundlePath = assetBundlePath.ToLower();
     if (!NoDependences && dAssetBundles.ContainsKey(UStaticFuncs.GetPlatformFolder(Application.platform)))
     {
         if (manifestBundle == null)
         {
             manifestBundle = dAssetBundles[UStaticFuncs.GetPlatformFolder(Application.platform)];
         }
         if (manifest == null)
         {
             manifest = (AssetBundleManifest)manifestBundle.LoadAsset("AssetBundleManifest");
         }
     }
     if (dAssetBundles.ContainsKey(assetBundlePath))
     {
         return(dAssetBundles[assetBundlePath]);
     }
     return(DoGetAssetBundle(assetBundlePath));
 }
コード例 #26
0
 public AssetBundle OnGetAssetBundle(string name, bool NoDependences = false)
 {
     name = name.ToLower();
     if (!name.EndsWith(AssetBundleSuffix))
     {
         name += AssetBundleSuffix;
     }
     if (!NoDependences && dAssetBundles.ContainsKey(UStaticFuncs.GetPlatformFolder(Application.platform)))
     {
         if (manifestBundle == null)
         {
             manifestBundle = dAssetBundles[UStaticFuncs.GetPlatformFolder(Application.platform)];
         }
         if (manifest == null)
         {
             manifest = (AssetBundleManifest)manifestBundle.LoadAsset("AssetBundleManifest");
         }
     }
     if (dAssetBundles.ContainsKey(name))
     {
         return(dAssetBundles[name]);
     }
     return(null);
 }
コード例 #27
0
    private IEnumerator DoCheckRemoteVersion(Action <List <string> > downloadComplete, Action <int, int, float> downloadProgress, Func <string, bool> filter, bool NoDependeces, params string[] resources)
    {
        yield return(new WaitForEndOfFrame());

        this.downloadComplete = downloadComplete;
        downloading           = true;

        ResetDownloadStatus();

        if (string.IsNullOrEmpty(UStaticFuncs.DownLoadConfigURL))
        {
            Debug.Log("资源下载地址为空");
        }
        else
        {
            Debug.Log("正在检查资源版本");
            downloadingResources = resources.ToList();
            if (!NoDependeces)
            {
                foreach (var r in resources)
                {
                    var files = UAssetBundleDownloader.Instance.OnGetAssetBundleDependeces(r);
                    foreach (var f in files)
                    {
                        if (downloadingResources.Contains(f))
                        {
                            continue;
                        }
                        downloadingResources.Add(f);
                    }
                }
            }
            var downloadedResources = new List <string>();
            if (dFileRemoteVersions.Count == 0)
            {
                var url = UStaticFuncs.DownLoadConfigURL + "versions.txt?-" + ApiDateTime.Now.Ticks;
                if (UStaticFuncs.GetPlatformFolder(Application.platform) == UStaticFuncs.GetPlatformFolder(RuntimePlatform.WindowsPlayer))
                {
                    if (!url.Contains("://"))
                    {
                        url = "file://" + url;
                    }
                }
                WWW www = new WWW(url);
                yield return(www);

                if (string.IsNullOrEmpty(www.error))
                {
                    var text  = www.text;
                    var atext = text.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (var t in atext)
                    {
                        var name = "";
                        var av   = t.Split('|');
                        if (av.Length < 3)
                        {
                            continue;
                        }
                        name = av[0];
                        if (name.StartsWith("/") || name.StartsWith("\\"))
                        {
                            name = name.Substring(1);
                        }
                        name = name.Replace("\\", "/");
                        var filecell = new RemoteFileCell();
                        filecell.version = av[1];
                        filecell.bytes   = typeParser.Int64Parse(av[2]);
                        if (dFileRemoteVersions.ContainsKey(name))
                        {
                            dFileRemoteVersions[name] = filecell;
                        }
                        else
                        {
                            dFileRemoteVersions.Add(name, filecell);
                        }
                    }
                }
                else
                {
                    Debug.Log("检查资源版本失败," + www.error);
                }
            }

            foreach (var rver in dFileRemoteVersions)
            {
                if (filter != null && filter(rver.Key))
                {
                    if (!downloadingResources.Contains(rver.Key))
                    {
                        downloadingResources.Add(rver.Key);
                    }
                    if (!NoDependeces)
                    {
                        var files = OnGetAssetBundleDependeces(rver.Key);
                        foreach (var f in files)
                        {
                            if (downloadingResources.Contains(f))
                            {
                                continue;
                            }
                            downloadingResources.Add(f);
                        }
                    }
                }

                var remove = new List <string>();
                foreach (var n in downloadingResources)
                {
                    if (!dFileRemoteVersions.ContainsKey(n))
                    {
                        remove.Add(n);
                    }
                }
                foreach (var r in remove)
                {
                    downloadingResources.Remove(r);
                }
            }

            foreach (var r in downloadingResources)
            {
                totalBytes += dFileRemoteVersions[r].bytes;
            }

            if (dFileRemoteVersions.Count != 0)
            {
                waitingForDownload = new List <string>();
                waitingForDownload.AddRange(downloadingResources);
                if (downloadingResources.Count == 0)
                {
                    OnDownloadComplete(waitingForDownload);
                }
                else
                {
                    for (var i = 0; i < DownloadHandlerCount && i < downloadingResources.Count; i++)
                    {
                        StartToDownloadResources(downloadComplete, downloadProgress);
                    }
                }
            }
        }
    }
コード例 #28
0
    public T OnLoadAsset <T>(string assetBundlePath) where T : UnityEngine.Object
    {
        Debug.Log($"OnLoadAsset Enter.bUsingAb:{Enter.bUsingAb}");
#if UNITY_EDITOR
        if (!Enter.bUsingAb)
        {
            var prefab = UnityEditor.AssetDatabase.LoadAssetAtPath("Assets/RemoteResources/" + assetBundlePath, typeof(T)) as T;
            if (prefab != null)
            {
                return(prefab);
            }
            else
            {
                prefab = UnityEditor.AssetDatabase.LoadAssetAtPath("Assets/RemoteResources/" + assetBundlePath + ".prefab", typeof(T)) as T;
                if (prefab != null)
                {
                    return(prefab);
                }
            }
        }
#endif
        if (!Enter.bUsingAb)
        {
            var path = assetBundlePath;
            if (path.Contains("."))
            {
                path = path.Split('.')[0];
            }
            return(Resources.Load <T>(path));
        }

        var assetName = UStaticFuncs.GetAssetBundleName(assetBundlePath);
        if (dAssets.ContainsKey(assetName) && dAssets[assetName] != null && dAssets[assetName] is T)
        {
            return(dAssets[assetName] as T);
        }
        var ab = OnGetAssetBundle(assetBundlePath);
        if (ab == null)
        {
            return(Resources.Load <T>(assetBundlePath));
        }
        var deps = OnGetAssetBundleDependeces(assetBundlePath + AssetBundleSuffix);
        foreach (var dep in deps)
        {
            OnGetAssetBundle(dep);
        }
        if (dAssets.ContainsKey(assetName) &&
            dAssets[assetName] != null)
        {
            return(dAssets[assetName] as T);
        }
        var t = ab.LoadAsset <T>(assetName);
        if (t == null)
        {
            return(t);
        }
        if (dAssets.ContainsKey(assetName))
        {
            dAssets[assetName] = t;
        }
        else
        {
            dAssets.Add(assetName, t);
        }
        return(t);
    }
コード例 #29
0
    private IEnumerator DoCheckRemoteVersion(Action <List <string> > downloadComplete, Action <int, int, float> downloadProgress, Func <string, bool> filter, bool NoDependeces, params string[] resources)
    {
        if (string.IsNullOrEmpty(UStaticFuncs.DownLoadConfigURL))
        {
            Debug.Log("资源下载地址为空。");
        }
        else
        {
            Debug.Log("正在检查资源版本");
            var resourcesList = resources.ToList();
            if (!NoDependeces)
            {
                foreach (var r in resources)
                {
                    var files = UAssetBundleDownloader.Instance.OnGetAssetBundleDependeces(r);
                    foreach (var f in files)
                    {
                        if (resourcesList.Contains(f))
                        {
                            continue;
                        }
                        resourcesList.Add(f);
                    }
                }
            }
            var downloadedResources = new List <string>();
            if (dFileRemoteVersions.Count == 0)
            {
                var url = UStaticFuncs.DownLoadConfigURL + "versions.txt?" + ApiDateTime.Now.Ticks;
                if (UStaticFuncs.GetPlatformFolder(Application.platform) == UStaticFuncs.GetPlatformFolder(RuntimePlatform.WindowsPlayer))
                {
                    if (!url.Contains("://"))
                    {
                        url = "file://" + url;
                    }
                }
                www = new WWW(url);
                yield return(www);

                if (string.IsNullOrEmpty(www.error))
                {
                    var text  = www.text;
                    var atext = text.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (var t in atext)
                    {
                        var name = "";
                        var av   = t.Split('|');
                        if (av.Length < 3)
                        {
                            Debug.LogError("remote version file check failed");
                        }
                        name = av[0];
                        if (name.StartsWith("/") || name.StartsWith("\\"))
                        {
                            name = name.Substring(1);
                        }
                        name = name.Replace("\\", "/");
                        var filecell = new RemoteFileCell();
                        filecell.version = av[1];
                        filecell.bytes   = typeParser.Int64Parse(av[2]);
                        if (dFileRemoteVersions.ContainsKey(name))
                        {
                            dFileRemoteVersions[name] = filecell;
                        }
                        else
                        {
                            dFileRemoteVersions.Add(name, filecell);
                        }
                    }
                }
                else
                {
                    Debug.Log("检查资源版本失败," + www.error);
                }
            }

            foreach (var rver in dFileRemoteVersions)
            {
                if (filter != null && filter(rver.Key))
                {
                    if (!resourcesList.Contains(rver.Key))
                    {
                        resourcesList.Add(rver.Key);
                    }
                    if (!NoDependeces)
                    {
                        var files = OnGetAssetBundleDependeces(rver.Key);
                        foreach (var f in files)
                        {
                            if (resourcesList.Contains(f))
                            {
                                continue;
                            }
                            resourcesList.Add(f);
                        }
                    }
                }

                var remove = new List <string>();
                foreach (var n in resourcesList)
                {
                    if (dAssetBundles.ContainsKey(n) ||
                        !dFileRemoteVersions.ContainsKey(n))
                    {
                        remove.Add(n);
                    }
                }
                foreach (var r in remove)
                {
                    resourcesList.Remove(r);
                }
            }

            totalBytes = 0;
            foreach (var r in resourcesList)
            {
                totalBytes += dFileRemoteVersions[r].bytes;
            }

            if (dFileRemoteVersions.Count != 0)
            {
                if (resourcesList.Count == 0)
                {
                    downloadComplete?.Invoke(resourcesList);
                }
                else
                {
                    StartToDownloadResources(downloadComplete, downloadProgress, downloadedResources, resourcesList);

#if UNITY_IOS || UNITY_EDITOR
                    StartCoroutine(DelayUpdateProgress(downloadProgress, downloadedResources, resourcesList));
#endif
                }
            }
        }
    }
コード例 #30
0
 public T FindWidget <T>(Transform trans, string widgetName) where T : Component
 {
     return(UStaticFuncs.FindChildComponent <T>(trans, widgetName));
 }