Beispiel #1
0
        private IEnumerator SaveAssetBundleOnDisk(AssetBundleNumbers number)
        {
            string assetBundleName = GetAssetBundleName(number);
            string uri             = GetAssetBundlePath(number);

            UnityWebRequest request = UnityWebRequest.Get(uri);

            yield return(request.Send());

            if (!Directory.Exists(assetBundleDirectory))
            {
                Directory.CreateDirectory(assetBundleDirectory);
                LogManager.Instance.UserDebug(LogColor.Orange, "AssetBundleManager", "AssetBundle Directory 생성");
            }
            else
            {
                LogManager.Instance.UserDebug(LogColor.Orange, "AssetBundleManager", "해당 폴더가 이미 존재합니다.");
            }

            FileStream fs = new FileStream(assetBundleDirectory + assetBundleName, FileMode.Create); // Create는 있으면 덮어씀, CreateNew는 새로 생성;

            fs.Write(request.downloadHandler.data, 0, (int)request.downloadedBytes);
            fs.Close();

            LogManager.Instance.UserDebug(LogColor.Orange, "AssetBundleManager", "다운로드 완료" + " " + request.downloadedBytes + "Bytes");
        }
Beispiel #2
0
        //private void SetWebpaths()
        //{
        //    /* AssetBundle */
        //    WebPaths.Add((int)AssetBundleNumbers.Player, "");
        //    WebPaths.Add((int)AssetBundleNumbers.Skill, "");
        //    WebPaths.Add((int)AssetBundleNumbers.Enemy, "");
        //    WebPaths.Add((int)AssetBundleNumbers.Boss1, "");
        //    WebPaths.Add((int)AssetBundleNumbers.Boss2, "");
        //    WebPaths.Add((int)AssetBundleNumbers.Boss3, "");
        //    WebPaths.Add((int)AssetBundleNumbers.Tile, "");
        //    WebPaths.Add((int)AssetBundleNumbers.UI, "");
        //    WebPaths.Add((int)AssetBundleNumbers.canvas, "https://drive.google.com/uc?authuser=0&id=1AHBIgStWfP28ODXGaY3pxU2OslSTsl3Q&export=download");
        //    WebPaths.Add((int)AssetBundleNumbers.objects, "https://drive.google.com/uc?authuser=0&id=189GqP1ULCgaZDLq-x9VCrH3eCDOv9qpJ&export=download");

        //    /* Manifest */
        //    WebManifest.Add((int)AssetBundleNumbers.objects, "https://drive.google.com/uc?authuser=0&id=1qWeskKwcwEyh330RmR36GV4TReFJlIui&export=download");
        //    WebManifest.Add((int)AssetBundleNumbers.canvas, "https://drive.google.com/uc?authuser=0&id=174Bgh4SsX7koF9PVDNFWjYlUpS4ihPjE&export=download");
        //}

        private void AddBundles(AssetBundleNumbers num, AssetBundle bundle)
        {
            if (!Bundles.ContainsKey((int)num))
            {
                Bundles.Add((int)num, bundle);
            }
        }
Beispiel #3
0
        /// <summary>
        /// 현재 에셋번들이 최신버전인지 체크한다.
        /// </summary>
        public IEnumerator CheckAssetBundleVersion(AssetBundleNumbers number)
        {
            string assetBundleName = GetAssetBundleName(number) + ".manifest";
            string uri             = GetManifestPath(number);

            Debug.Log(uri);

            UnityWebRequest request = UnityWebRequest.Get(uri);

            yield return(request.Send());

            if (!Directory.Exists(assetBundleDirectory))
            {
                Directory.CreateDirectory(assetBundleDirectory);
                LogManager.Instance.UserDebug(LogColor.Orange, "AssetBundleManager", "AssetBundle Directory 생성");
            }
            else
            {
                LogManager.Instance.UserDebug(LogColor.Orange, "AssetBundleManager", "해당 폴더가 이미 존재합니다.");
            }

            FileStream fs = new FileStream(assetBundleDirectory + assetBundleName, FileMode.Create); // Create는 있으면 덮어씀, CreateNew는 새로 생성;

            fs.Write(request.downloadHandler.data, 0, (int)request.downloadedBytes);
            fs.Close();

            LogManager.Instance.UserDebug(LogColor.Orange, "AssetBundleManager", "다운로드 완료" + " " + request.downloadedBytes + "Bytes");

            /////////////////////////////////////////////////////////////

            string newManifest = string.Empty;
            //string nowManifest = string.Empty; // DataManager에서 받아옴
            string tempHash = "e8e649b24e98b76009451b3b64b5e42e";


            fs = new FileStream(assetBundleDirectory + assetBundleName, FileMode.Open);
            StreamReader sr = new StreamReader(fs);


            for (int i = 0; i < HashCodeLine; i++)
            {
                newManifest = sr.ReadLine();
                Debug.Log(i + ": " + newManifest);
            }
            sr.Close(); fs.Close();

            string[] split = newManifest.Split(' ');
            newManifest = split[split.Length - 1];
            Debug.Log(newManifest);

            if (newManifest.CompareTo(tempHash) == 0)
            {
                Debug.Log("같은 파일");
            }
            else
            {
                Debug.Log("다른 파일. 에셋번들 다운로드");
            }
        }
        private IEnumerator CheckAssetBundleVersion(AssetBundleNumbers bundleNumbers)
        {
            string assetBundleName = GetAssetBundleName(bundleNumbers) + ".manifest";
            string uri             = GetManifestPath(bundleNumbers);

            Debug.Log(uri);

            UnityWebRequest request = UnityWebRequest.Get(uri);

            yield return(request.Send());

            if (!Directory.Exists(assetBundleDirectory))
            {
                Directory.CreateDirectory(assetBundleDirectory);
                LogManager.Instance.UserDebug(LogColor.Orange, "AssetBundleManager", "AssetBundle Directory 생성");
            }
            else
            {
                LogManager.Instance.UserDebug(LogColor.Orange, "AssetBundleManager", "해당 폴더가 이미 존재합니다.");
            }

            using (FileStream fs = new FileStream(assetBundleDirectory + assetBundleName, FileMode.Create)) // Create는 있으면 덮어씀, CreateNew는 새로 생성;
            {
                fs.Write(request.downloadHandler.data, 0, (int)request.downloadedBytes);
                fs.Close();
            }
            LogManager.Instance.UserDebug(LogColor.Orange, "AssetBundleManager", "다운로드 완료" + " " + request.downloadedBytes + "Bytes");

            string newManifest = string.Empty;

            using (FileStream fs = new FileStream(assetBundleDirectory + assetBundleName, FileMode.Open))
            {
                StreamReader sr = new StreamReader(fs);

                for (int i = 0; i < hashCodeLine; i++)
                {
                    newManifest = sr.ReadLine();
                    Debug.Log(i + ": " + newManifest);
                }
                sr.Close(); fs.Close();
            }
            string[] split = newManifest.Split(' ');
            newManifest = split[split.Length - 1];
            Debug.Log(newManifest);

            if (DataManager.Instance.CheckedBundleVersion(bundleNumbers, newManifest))
            {
                Debug.Log("같은 파일");
            }
            else
            {
                DownLoadAssetBundle(bundleNumbers);
                Debug.Log("다른 파일. 에셋번들 다운로드");
            }
        }
Beispiel #5
0
        private string GetAssetBundlePath(AssetBundleNumbers key)
        {
            string bundleName = string.Empty;

            if (!WebPaths.TryGetValue((int)key, out bundleName))
            {
                LogManager.Instance.UserDebug(LogColor.Orange, "AssetBundleManager", "Dictionary에 존재하지 않는 번들입니다.");
                return(null);
            }
            return(bundleName);
        }
Beispiel #6
0
        private IEnumerator LoadAssetBundleFromLocalDisk(AssetBundleNumbers number)
        {
            string assetBundleName = GetAssetBundleName(number);
            string uri             = "file:///" + Application.dataPath + "/0.AssetBundles/" + assetBundleName;

            UnityWebRequest request = UnityWebRequest.GetAssetBundle(uri);

            yield return(request.Send());

            AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request);

            AddBundles(number, bundle);
        }
Beispiel #7
0
        /// <summary>
        /// AssetBundle의 키 값을 비교하여 업데이트 유무를 Bool형식으로 리턴함.(사용자는 꼭 Enum순서대로 함수를 사용할것.
        /// ex) Player -> Skill(o) , Player -> Enemy(x))
        /// </summary>
        /// <param name="bundleNumbers"></param>
        /// <param name="assetBundleData"></param>
        /// <returns></returns>
        public bool CheckedBundleVersion(AssetBundleNumbers bundleNumbers, string assetBundleData)
        {
            if (!Directory.Exists(DirectoryName))
            {
                Directory.CreateDirectory(DirectoryName);
                LogManager.Instance.UserDebug(LogColor.Magenta, GetType().Name, "AssetBundle을 위한 Data폴더 생성");
            }

            FileInfo fileInfo = new FileInfo(FilePath);

            if (!fileInfo.Exists)
            {
                File.Create(FilePath).Dispose();
            }
            string[] lines;
            lines = File.ReadAllLines(FilePath);
            if (lines.Length - 1 < (int)bundleNumbers)
            {
                using (StreamWriter writer = new StreamWriter(FilePath, true))
                {
                    writer.WriteLine(assetBundleData);
                    LogManager.Instance.UserDebug(LogColor.Magenta, GetType().Name, "기록된 정보가 없음. 새로 입력.");
                }
                return(false);
            }
            else if (!lines[(int)bundleNumbers].Equals(assetBundleData))
            {
                using (StreamWriter writer = new StreamWriter(FilePath, false))
                {
                    lines[(int)bundleNumbers] = assetBundleData;
                    for (int i = 0; i < lines.Length; i++)
                    {
                        writer.WriteLine(lines[i]);
                    }
                    LogManager.Instance.UserDebug(LogColor.Magenta, GetType().Name, "기록된 정보와 불일치. 업데이트 필요.");
                }
                return(false);
            }
            LogManager.Instance.UserDebug(LogColor.Magenta, GetType().Name, "기록된 정보와 일치. 업데이트 필요없음");
            return(true);
        }
Beispiel #8
0
 private string GetAssetBundleName(AssetBundleNumbers number)
 {
     return(number.ToString());
 }
 /// <summary>
 /// 로컬 드라이브에서 에셋번들을 불러온다.
 /// 실사용시에는 매개변수에 AssetBundleNumbers를 받아 구분한다.
 /// </summary>
 public void LocalLoadAssetBundle(AssetBundleNumbers bundleNumber)
 {
     LoadAssetBundleFromLocalDisk(bundleNumber);
 }
 /// <summary>
 /// 정해진 웹주소에서 에셋번들을 다운 받는다.
 /// 실사용시에는 매개변수에 AssetBundleNumbers를 받아 구분한다.
 /// </summary>
 public void DownLoadAssetBundle(AssetBundleNumbers bundleNumber)
 {
     SaveAssetBundleOnDisk(AssetBundleNumbers.Player);
 }