Сохранение AssetBundle и последующая загрузка из кэша!

Программирование на Юнити.

Сохранение AssetBundle и последующая загрузка из кэша!

Сообщение piotrDevPro 23 июл 2021, 12:01

Здравствуйте!

Хотелось бы поинтересоваться, если кто-то сталкивался с подобным вопросом "Как загруженный из AssetsBudle обьект по URL- ccылке, в дальнейшем загружать из кэша?", то есть мы один раз его загрузили, сохранили в кэш и при последующей загрузке мы могли вытащить обьект из кэша, а не при каждом старте приложения загружать по новой [curved_hands]. Подскажите, помогите если кому то известен метод.

Вот собснно мой соурс код:

Синтаксис:
Используется csharp
public class LoadAssetsBundle : MonoBehaviour
{
    public static LoadAssetsBundle manage;
   
    AssetBundle assetBundle;
    WWW www;
    public string SceneNameToLoadAB;
    bool loadingStart = false;
    [SerializeField] Transform parentForAB;
    /// <summary>
    /// 11FFSZQ5BY9Vg6x67kkLlOm9275vfB3Jw
    /// </summary>
    [SerializeField] string url = "https://drive.google.com/uc?export=download&id=1xVWP64yAxmdg_SDxTDn_Qa9IV9A5Koxr";
    [SerializeField] string url_city_online = "https://drive.google.com/uc?export=download&id=1JPvF5A9Ipel98rKU0_ZOfeKAzpL6bCNh";
    [Header("Other")]
    public GameObject loadingPanel;
    public Image bg_fill;
    public Text percent;
    [Header("Loaded Object")]
    [SerializeField] GameObject obj;



    private void Awake()
    {
        if (manage == null)
        {
            manage = this;
        }
    }

    public void loadCar8()
    {
        www = new WWW(url);
        loadingPanel.SetActive(true);
        loadingStart = true;
        StartCoroutine(car(www));
    }

    // Update is called once per frame

    private void Update()
    {

        if (loadingStart)
        {
            double v = http://www.progress;
            bg_fill.fillAmount = (float)v;
            v = System.Math.Round(v, 2);
            v *= 100;
            percent.text = "" + v + "%";
            print("loadingStart");
        }
    }
    IEnumerator car(WWW www)
    {
        yield return www;

        while (http://www.isDone == false)
        {
            yield return null;
        }

        AssetBundle bundle = http://www.assetBundle;
        if (http://www.error == null)
        {
            obj = (GameObject)bundle.LoadAsset("car11");
            obj.GetComponentInChildren<Rigidbody>().isKinematic = true;
            obj.transform.position = new Vector3(0,1.3f,0);
            obj.transform.eulerAngles = new Vector2(0,0);
            Instantiate(obj).transform.SetParent(parentForAB);
           
            loadingPanel.SetActive(false);
            loadingStart = false;
            PlayerPrefs.SetInt("CarLoaded", 1);
            print("Assets loading is completed");
        }
        else
        {
            Debug.Log(http://www.error);
        }
    }
 
piotrDevPro
UNец
 
Сообщения: 25
Зарегистрирован: 30 май 2017, 20:36

Re: Сохранение AssetBundle и последующая загрузка из кэша!

Сообщение Shekn 23 июл 2021, 13:18

1. Вместо WWW используй UnityWebRequest
2. В твоем коде нет команды начать заргрузку чего-либо. И вобще, он не рабочий.
3. При загрузке AssetBundl-а система как раз смотрит сначала в кэш, и если там нет, то грузит по сети. Это уже встроено. Но можно заставить сразу из сети грузить, без проверки кэша.
https://tugcga.github.io/
Аватара пользователя
Shekn
UNIт
 
Сообщения: 95
Зарегистрирован: 05 фев 2016, 14:20

Re: Сохранение AssetBundle и последующая загрузка из кэша!

Сообщение piotrDevPro 23 июл 2021, 18:37

Shekn писал(а):1. Вместо WWW используй UnityWebRequest
2. В твоем коде нет команды начать заргрузку чего-либо. И вобще, он не рабочий.
3. При загрузке AssetBundl-а система как раз смотрит сначала в кэш, и если там нет, то грузит по сети. Это уже встроено. Но можно заставить сразу из сети грузить, без проверки кэша.


Он рабочий, по методу loadCar8() запускаем карутину, и начинаем скачивать по ссылке, в тот момент когда нам это нужно будет, дело в том что каждый раз на старте сцены выполняется загрузка по url, а нужно чтоб один раз скачали и все последующие грузили из кэша. Насчет UnityWebRequest благодарю, буду пробывать.
piotrDevPro
UNец
 
Сообщения: 25
Зарегистрирован: 30 май 2017, 20:36

Re: Сохранение AssetBundle и последующая загрузка из кэша!

Сообщение Shekn 24 июл 2021, 08:10

Про нерабочий, я имел ввиду, что у тебя есть строчка: while (http://www.isDone == false)
Она синтаксически неверная, поэтому скрипт не может работать.

Класс WWW уже где-то с 4-ой версии Юнити считается устаревшим. Очень давно, короче.
https://tugcga.github.io/
Аватара пользователя
Shekn
UNIт
 
Сообщения: 95
Зарегистрирован: 05 фев 2016, 14:20


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9