Unity - 取得Android手機中的AssetBundle來使用 (使用Unity的API)

  取得Android手機中保存的資料並且載入到遊戲中,之前有發過一篇(Unity - 取得Android手機中的圖檔來做為材質),使用的方法是製作自己的PlugIn,目的在於內部java抓取資料傳送給Unity並使用,不過如果只是要讀取某些下載的檔案像是Bundle之類的,可以不用這麼麻煩。

  簡單來說可以用Application.persistentDataPath來取得你存放檔案的位置,或者是你明確的知道該檔案放在外部SD卡的哪個資料夾下,接著都可以用WWW來讀取該物件,讀取完畢後再看是要怎麼做就行了。



參考Code
public class LoadFile : MonoBehaviour
{
    public SpriteRenderer testSprite1; //場景上的某一個Sprite
    public SpriteRenderer testSprite2;

    void Start()
    {
        StartCoroutine(LoadDataPath()); //用第一個方法改變第一張Sprite的圖案
        StartCoroutine(LoadAsset()); //用第二個方法改變第二張Sprite的圖案
    }

    public IEnumerator LoadDataPath()
    {
        //我在我的遊戲資料夾下 /data/com.Demo.Asset/files 放了一個檔案TextAsset.unity3D
        WWW www = new WWW("file://" + Application.persistentDataPath + "/TestAsset.unity3d"); //使用WWW載入
        yield return www;

        AssetBundle bundle = www.assetBundle; //轉換成AssetBundle
        Sprite s = bundle.LoadAsset("TestSprite", typeof(Sprite)) as Sprite; //我這個Bundle裡面只有一個Sprite物件,名稱是TestSprite
        testSprite1.sprite = s; //使用這個Sprite來替換場景中的一個Sprite
    }

    public IEnumerator LoadAsset()
    {
        //我在外部SD卡放置同樣的檔案,這邊sdcard1是我手機外部記憶卡的路徑名稱,不同手機要確認路徑
        WWW www = new WWW("file:///sdcard1/TestAsset.unity3d"); //使用WWW載入
        yield return www;

        if (www != null)
        {
            AssetBundle bundle = www.assetBundle; //轉換成AssetBundle
            Sprite s = bundle.LoadAsset("TestSprite", typeof(Sprite)) as Sprite; //我這個Bundle裡面只有一個Sprite物件,名稱是TestSprite
            testSprite2.sprite = s; //使用這個Sprite來替換場景中的一個Sprite
        }
    }
}


  這邊簡單的做個Demo,讀取一個預先製作好的AssetBundle,這個Bundle裡面我只有放一張圖片,在檔案執行後會載入這個Bundle並且把場景上的一個Sprite改變圖案。

No comments:

Post a Comment