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"); }
//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); } }
/// <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("다른 파일. 에셋번들 다운로드"); } }
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); }
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); }
/// <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); }
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); }