1. 程式人生 > >C# Unity用AssetBundle載入本地資源 (1)

C# Unity用AssetBundle載入本地資源 (1)

/// <summary>
    ///  AssetBundle載入器
    /// </summary>
    public class AssetBundleLoger
    {
        /// <summary>
        /// 更新檔案下載目錄
        /// </summary>
        private const string StreamingAssetPath = "/StreamingAssets/";


        private static string _ApplicationStreamingAssets = Application.streamingAssetsPath;


        public static string ApplicationDataPath = Application.dataPath;


        public static string ApplicationPersistentAssets = Application.platform == RuntimePlatform.Android ? Application.persistentDataPath : _ApplicationStreamingAssets;
        /// <summary>
        /// assetbundle記憶體列表
        /// </summary>
        private static Dictionary<string, AssetBundle> AssetBundleArray = new Dictionary<string, AssetBundle>();
        /// <summary>
        /// object記憶體列表, 用來快取assetbundle加載出的object物件加快載入速度
        /// </summary>
        private static Dictionary<string, object> _ObjectMemory = new Dictionary<string, object>(); 
        /// <summary>
        /// 根據平臺區分路徑間隔
        /// </summary>
        /// <returns></returns>
        public static string GetPathGap()
        {
            var gapPath = StreamingAssetPath;
            if (Application.platform == RuntimePlatform.WindowsEditor)
            {
                gapPath = "/";
            }
            return gapPath;
        }
        /// <summary>
        /// 載入AssetBundle(<可能會有載入時間過長的問題, 測試版本>)
        /// </summary>
        /// <param name="path">assetbundle地址</param>
        /// <returns>assetbundle物件</returns>
        private static AssetBundle LoadAssetBundle(string path)
        {
            return AssetBundle.CreateFromFile(path);
        }
        /// <summary>
        /// AssetBundle載入
        /// </summary>
        /// <param name="path">名字</param>
        /// <param name="loadType">載入的型別</param>
        /// <returns></returns>
        public static Object Load(string path, Type loadType)
        {
            try
            {
                // 資源Assetbundle
                AssetBundle source = null;
                Object result = null;
                Stopwatch sw = new Stopwatch();
                sw.Start();
                if (!AssetBundleArray.ContainsKey(path))
                {
                    var dep = LoadAssetBundle(ApplicationPersistentAssets + GetPathGap() + path + ".assetbundle");
                    AssetBundleArray.Add(path, dep);
                    source = dep;
                }
                else
                {
                    source = AssetBundleArray[path];
                }
                result = source.Load(path, loadType);
                sw.Stop();
                Debug.Log("耗時" + sw.ElapsedMilliseconds);
                return result;
            }
            catch (Exception)
            {
                
                throw;
            }
        }

相關推薦

C# UnityAssetBundle載入本地資源 1

/// <summary>     ///  AssetBundle載入器     /// </summary>     public class AssetBundleLoger     {         /// <summary>

unity使用AssetBundle使用記錄一--場景打包成AssetBundle載入

//打包場景為AssetBundle,使用BuildPlayer方式 static void CreateSceneAssetBundle_BuildPlayer() { string[] name = GetSelectionFile(); for (int

C語言指針的使用例子1指針地址的輸出

clu 用例 int clas 指針 light 使用 指針的使用 div #include <stdio.h> int main(void) { int a=10; int *p = &a; *p = 89; printf("變量

Haskell 求解 ACM 競賽題1:Hello,World!

找了一本用C語言編寫的ACM競賽教程,把其中的程式用 Haskell 重寫一遍,這可能是熟悉 Haskell 的最好辦法。首先我們看一看 Hello 程式如何實現。如果有 C 語言基礎,應該很容易理解 Haskell 程式碼。 Hello, world main = do

基於Visual C++之Windows核心程式設計程式碼分析1實現裝置管理器列舉裝置

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

ASIO—下一代C++標準可能接納的網路庫1簡單的應用

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

QT 下opencv實現影象分類1

一.概述 1.按影象中的內容給影象分類是計算機視覺中比較適合初學者的專案,我見過好多手機相簿都有這一個功能,比如把美食歸為一個標籤,藍天白雲歸為一個標籤等等。還有我之前做過的車牌識別的專案都用到影象分類。 2.我做這個專案的環境是QT加opencv3.2,專案在MAC上跑

Spring 進階(9)訪問資源1

Spring提供了一個很膩害的資源訪問介面--Resource,注意,是提供了一個介面,而不是提供了一個類,實際上它提供了好多好多類,這種面向介面程式設計的思想是很酷的~~~~ 閒話少敘,說第一個Resource介面的實現類--UrlResource,這個類通過在構造方法中傳入需要獲取的

C++學習之迴圈和關係表示式1

在c語言中我這部分還算學習的挺好,所以這部分我只新增一些我不太懂的點: 1.通常,cout在顯示bool值之前將它們轉換為int,但是在前面使用cout.setf(ios:boolalpha)函式呼叫設定了一個標記,該標記命令cout顯示true和false,而不是1和0;

C++疑難點解讀-程式設計入門概念1

程式=資料結構+演算法 資料結構:一個物件所包含的屬性,形如自然界中的個體,例如大樹的直徑,高度等等 演算法:用於對物件進行操作,即對物件的屬性進行操作 程式:用於解決某些物件的方法 物件:即某個事物的具體屬性+所能對自己或可能對他人屬性作修改的動作 類:從總結角度

Wordpress搭建個人網站1

WordPress是世界著名的個人部落格系統,這陣子一直在研究它的使用方法,也買了域名,搭建起了自己的個人部落格網站——http://www.initobject.com/ 域名含義即——初始化物件(init Object)。 網站截圖如下,歡迎訪問~

C/C++基本語法,入門及提高1

-- 學習C++可分為4個層次:   第一層次,C++基礎:挑選一本入門書籍,如《C++ Primer》、《C++大學教程》、或Stroustrup撰寫的經典《C++程式設計語言》或他一年半前的新作《C++程式設計原理與實踐》,而一般C++課程也止於此,另外《C++ 標準程式

C#--第2周實驗--任務21--使用者輸入一個字元,並用Console類的Readkey()方法讀取該字元,並在控制檯上輸出該字元

/* (程式頭部註釋開始) * 程式的版權和版本宣告部分 * Copyright (c) 2011, 煙臺大學計算機學院學生 * All rights reserved. * 檔名稱:建立一個控制檯應用--使用者輸入一個字元,並用Console類的Readkey()方法讀

servlet載入配置檔案1

大三期間,和老師一起寫專案,發現一些小的技巧是之前沒有實現過:使用servlet啟動載入配置檔案,然後通過反射獲取物件的做法可以值得今後學習借用: <servlet> &

C++單例模式getInstance()——設計模式1

所謂單例模式就是一個類有且只有一個例項; 單例模式也稱為單件模式、單子模式,可能是使用最廣泛的設計模式。其意圖是保證一個類僅有一個例項,並提供一個訪問它的全域性訪問點,該例項被所有程式模組共享。有很多地方需要這樣的功能模組,如系統的日誌輸出,GUI應用必須是單滑鼠,MODEM的聯接需要一條且只需要一條電話線

C++併發程式設計實戰》讀書筆記1

這兩天開始看《C++併發程式設計實戰》一書,感覺受益匪淺啊! 按照書中的同步併發操作(第四章)的內容,嘗試編寫執行緒安全的佇列,模擬固定採集時間和不確定處理時間下的佇列行為,供大家參考。 用到的C++多執行緒相關的主要內容為:mutex類(鎖物件),lock_guard模板

FPGA基礎知識24(xilinx 高速收發器系列:Xilinx 7 系列的時鐘資源1)

談到數字邏輯,談到FPGA設計,每位工程師都離不開時鐘。這裡我們簡單介紹一下xilinx 7 系列中的時鐘資源。時鐘設計的好壞,直接影響到佈局佈線時間、timing的收斂情況,FPGA的時鐘設計非常重要,認識FPGA的時鐘資源很有必要。 FPGA設計是分模組的,

如何使用C實現MQTT+TLS客戶端程式1--使用mosquitto搭建MQTT伺服器

前言 這是一個使用C語言實現的MQTT/TLS的客戶端程式,主要應用在各類嵌入式產品。如果想使用在Android裝置上,讀者可以參考Paho mqtt。 簡單介紹MQTT MQTT遙測傳輸(MQ Telemetry Transport,MQT

Vue的一個購物車1,雖然是自己寫的但是也是來源於指令碼之家的案例,就算轉載啦

百度的時候看別人的程式碼總是,這幾天沒有事情,這幾天專案需要,隨便研究了一下巴拉巴拉巴拉,寫了一個demo,大家看看,結果,看不懂,果然是太笨了,我是純菜鳥啊!!!!TOT,然後我也不知道怎麼才能把這個程式碼格式弄得很好看,  <div> 展示:商品名稱,商

node搭建本地伺服器1

1.建立一個資料夾,在裡面新建一個server.js檔案 內容如下 //引入http模組 var http = require('http'); //開啟本地http服務,監聽相應埠號 //request 瀏覽器發出請求物件 res是伺服器返回物件 http.cre