国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Unity Android 之 讀取下載獲取移動(dòng)端 sdcard 路徑下的指定文件夾的所有圖片的幾種方式的簡單整理

這篇具有很好參考價(jià)值的文章主要介紹了Unity Android 之 讀取下載獲取移動(dòng)端 sdcard 路徑下的指定文件夾的所有圖片的幾種方式的簡單整理。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Unity Android 之 讀取下載獲取移動(dòng)端 sdcard 路徑下的指定文件夾的所有圖片的幾種方式的簡單整理

目錄

Unity Android 之 讀取下載獲取移動(dòng)端 sdcard 路徑下的指定文件夾的所有圖片的幾種方式的簡單整理

一、簡單介紹

二、實(shí)現(xiàn)原理

三、注意事項(xiàng)

四、簡單實(shí)現(xiàn)步驟

五、關(guān)鍵代碼

附錄:

一、不同平臺使用宏區(qū)分路徑加載

二、Unity3D中的資源路徑

三、Unity3D各平臺路徑(包括手機(jī)內(nèi)置存儲路徑、SD卡等等)


一、簡單介紹

Unity中的一些基礎(chǔ)知識點(diǎn),便于后期查看學(xué)習(xí)。

本節(jié)介紹,加載Android手機(jī)移動(dòng)端sdcard 上指定文件上的圖片文件的簡單方式整理,方法不唯一,僅供參考。

二、實(shí)現(xiàn)原理

1、首先 使用 DirectoryInfo 獲取該文件夾下的所有文件信息

        DirectoryInfo direction = new DirectoryInfo(SD_URL2);
        //返回的指定數(shù)組 = 返回當(dāng)前目錄的所有文件列表的名字加格式數(shù)組 
        FileInfo[] files = direction.GetFiles("*");

2、然后,根據(jù)文件后綴,判斷是否是圖片,然后進(jìn)行對應(yīng)圖片的加載

         string ext = files[i].Extension;
         Debug.Log("  ext  " + ext);
         if (ext.EndsWith("jpg") || ext.EndsWith("png") || ext.EndsWith("jpeg"))

3、然后使用三種方式進(jìn)行加載

  • WWW w = new WWW(path);
  • UnityWebRequest uwr = new UnityWebRequest(url);
  • 文件讀取的方式:FileStream files = new FileStream(imagePath, FileMode.Open);

三、注意事項(xiàng)

1、Android 移動(dòng)端獲取文件夾下的文件信息時(shí),不用添加 "jar:file://" 前綴

2、Android 移動(dòng)端使用 WWW 或者 UnityWebRequest? 加載圖片文件時(shí),注意添加 "jar:file://" 前綴

3、Android 移動(dòng)端使用文件IO讀取文件時(shí),不用添加 "jar:file://" 前綴

4、讀取 sdcard 文件的時(shí)候,注意添加對應(yīng)權(quán)限

5、不同Android手機(jī)版本問題,雖然添加了 讀取 sdcard 權(quán)限,依然沒有權(quán)限讀取,在 AndroidManifest.xml 添加如下進(jìn)行處理

<application android:requestLegacyExternalStorage="true">

權(quán)限報(bào)錯(cuò):Unity: IOException: Permission denied

unity打開安卓jpg文件,Unity,android,Unity,移動(dòng)端圖片加載,sdcard,圖片下載

6、發(fā)現(xiàn) sdcard 或者 storage/ 或者?storage/emulated/0/ 好似都可以加載根目錄文件

四、簡單實(shí)現(xiàn)步驟

1、新建Unity 工程,簡單搭建場景

unity打開安卓jpg文件,Unity,android,Unity,移動(dòng)端圖片加載,sdcard,圖片下載

2、創(chuàng)建腳本,獲取sdcard 對應(yīng)文件夾下的文件信息,并簡單使用三種方式加載對應(yīng)圖片

unity打開安卓jpg文件,Unity,android,Unity,移動(dòng)端圖片加載,sdcard,圖片下載

3、把腳本添加到場景中

unity打開安卓jpg文件,Unity,android,Unity,移動(dòng)端圖片加載,sdcard,圖片下載

?

4、在 PlayerSettings 添加對應(yīng)sdcard 讀寫權(quán)限,Write Permission 設(shè)置為 External(SDCard)

unity打開安卓jpg文件,Unity,android,Unity,移動(dòng)端圖片加載,sdcard,圖片下載

?5、為了避免可能由于不同 Android 手機(jī)版本,可能出現(xiàn)給了權(quán)限依舊無法讀取的報(bào)錯(cuò)

Publishing Setting 勾選 Custom Main Mainifest ,在工程中顯示 AndroidManifest.xml,并添加android:requestLegacyExternalStorage="true"

unity打開安卓jpg文件,Unity,android,Unity,移動(dòng)端圖片加載,sdcard,圖片下載

unity打開安卓jpg文件,Unity,android,Unity,移動(dòng)端圖片加載,sdcard,圖片下載

unity打開安卓jpg文件,Unity,android,Unity,移動(dòng)端圖片加載,sdcard,圖片下載

?6、打包運(yùn)行到Android手機(jī),效果如下

unity打開安卓jpg文件,Unity,android,Unity,移動(dòng)端圖片加載,sdcard,圖片下載

?

五、關(guān)鍵代碼

1、LoadAndroidImgs.cs

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;

public class LoadAndroidImgs : MonoBehaviour
{
    string URL = "file://" + "/storage/emulated/0/TestLauncherImages/";
    string SD_URL =  "/storage/emulated/0/TestLauncherImages/";
    string SD_URL2 = "/sdcard/TestLauncherImages/";

    // Start is called before the first frame update
    void Start()
    {
        Load();
        GetTexture("https://scpic.chinaz.net/files/pic/pic9/201706/zzpic4354.jpg", (t) => {
            GameObject.Find("Canvas/RawImage (1)").GetComponent<RawImage>().texture = t;
        });
    }

    // Update is called once per frame
    void Update()
    {

    }

    void Load(){

        DirectoryInfo direction = new DirectoryInfo(SD_URL2);
        //返回的指定數(shù)組 = 返回當(dāng)前目錄的所有文件列表的名字加格式數(shù)組 
        FileInfo[] files = direction.GetFiles("*");
        //存儲讀取圖片的名字字符串
        List<string> imageNames = new List<string>();
        for (int i = 0; i < files.Length; i++)
        {
            //判斷圖片的格式字符串是否與指定的字符串不匹配。
            if (!files[i].Name.EndsWith(".meta"))
            {
                //Debug.LogFormat("圖片{0}的名字:{1}", i, files[i].FullName);
                //添加圖片路徑和名字字符串到泛型數(shù)組
                imageNames.Add(files[i].FullName);
                Debug.Log(files[i].FullName);
                string ext = files[i].Extension;
                Debug.Log("  ext  " + ext);
                if (ext.EndsWith("jpg") || ext.EndsWith("png") || ext.EndsWith("jpeg"))
                {
                    //StartCoroutine(doLoadByWWW("jar:file://" + files[i].FullName));

                    GetTexture("jar:file://"+files[i].FullName, (t) => {
                        GameObject.Find("Canvas/RawImage").GetComponent<RawImage>().texture = t;
                    });

                     //Texture2D tx = new Texture2D(100, 100);
                     //tx.LoadImage(getImageByte(files[i].FullName));
                     //GameObject.Find("Canvas/RawImage").GetComponent<RawImage>().texture = (tx);
                }
            }

            
        }

    }

    IEnumerator doLoadByWWW(String path)
    {

        WWW w = new WWW(path);

        yield return w;

        if (w.isDone)
        {
            Sprite sprite = Sprite.Create(w.texture, new Rect(0, 0, w.texture.width, w.texture.height), new Vector2(0.5f, 0.5f));

            GameObject.Find("Canvas/Image").GetComponent<Image>().sprite = sprite;

        }
    }

    /// <summary>
    /// 請求圖片
    /// </summary>
    /// <param name="url">圖片地址,like 'http://www.my-server.com/image.png '</param>
    /// <param name="action">請求發(fā)起后處理回調(diào)結(jié)果的委托,處理請求結(jié)果的圖片</param>
    /// <returns></returns>
    public void GetTexture(string url, Action<Texture2D> actionResult)
    {
        StartCoroutine(_GetTexture(url, actionResult));
    }

    /// <summary>
    /// 請求圖片
    /// </summary>
    /// <param name="url">圖片地址,like 'http://www.my-server.com/image.png '</param>
    /// <param name="action">請求發(fā)起后處理回調(diào)結(jié)果的委托,處理請求結(jié)果的圖片</param>
    /// <returns></returns>
    IEnumerator _GetTexture(string url, Action<Texture2D> actionResult)
    {
        UnityWebRequest uwr = new UnityWebRequest(url);
        DownloadHandlerTexture downloadTexture = new DownloadHandlerTexture(true);
        uwr.downloadHandler = downloadTexture;
        yield return uwr.SendWebRequest();
        Texture2D t = null;
        if (!(uwr.isNetworkError || uwr.isHttpError))
        {
            t = downloadTexture.texture;
        }
        else
        {
            Debug.Log("下載失敗,請檢查網(wǎng)絡(luò),或者下載地址是否正確: "+ uwr.error);
        }

        if (actionResult != null)
        {
            actionResult(t);
        }
    }

    /// <summary>  
    /// 根據(jù)圖片路徑返回圖片的字節(jié)流byte[]  
    /// </summary>  
    /// <param name="imagePath">圖片路徑</param>  
    /// <returns>返回的字節(jié)流</returns>  
    private static byte[] getImageByte(string imagePath)
    {
        FileStream files = new FileStream(imagePath, FileMode.Open);
        byte[] imgByte = new byte[files.Length];
        files.Read(imgByte, 0, imgByte.Length);
        files.Close();
        return imgByte;
    }

}

2、AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.unity3d.player"
    xmlns:tools="http://schemas.android.com/tools">
	
	<application android:requestLegacyExternalStorage="true">
        <activity android:name="com.unity3d.player.UnityPlayerActivity"
                  android:theme="@style/UnityThemeSelector">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
        </activity>
    </application>
</manifest>

附錄:

一、不同平臺使用宏區(qū)分路徑加載

#if UNITY_EDITOR
        filepath = Application.dataPath + "/StreamingAssets";
#elif UNITY_IOS || UNITY_IPHONE
        filepath = "file://" + Application.streamingAssetsPath;
#elif UNITY_ANDROID
        filepath = "jar:file://"  + Application.dataPath + "!/assets";
#endif

二、Unity3D中的資源路徑

  • Application.dataPath?? ?此屬性用于返回程序的數(shù)據(jù)文件所在文件夾的路徑。例如在Editor中就是Assets了。
  • Application.streamingAssetsPath?? ?此屬性用于返回流數(shù)據(jù)的緩存目錄,返回路徑為相對路徑,適合設(shè)置一些外部數(shù)據(jù)文件的路徑。
  • Application.persistentDataPath?? ?此屬性用于返回一個(gè)持久化數(shù)據(jù)存儲目錄的路徑,可以在此路徑下存儲一些持久化的數(shù)據(jù)文件。
  • Application.temporaryCachePath?? ?此屬性用于返回一個(gè)臨時(shí)數(shù)據(jù)的緩存目錄。
    ?

三、Unity3D各平臺路徑(包括手機(jī)內(nèi)置存儲路徑、SD卡等等)

關(guān)于Unity3D在各平臺上的路徑問題,網(wǎng)上有好多的資料,如下是比較好的參考資料:

1、http://www.manew.com/thread-23491-1-1.html

2、#你好Unity3D#手機(jī)上的路徑(來自我的長微博) | 雨松MOMO程序研究院

? 這里我不詳細(xì)解釋和路徑的用法,只把各個(gè)路徑對應(yīng)的位置和訪問方式總結(jié)一下。

1、Resources路徑

? Resources文件夾是Unity里自動(dòng)識別的一種文件夾,可在Unity編輯器的Project窗口里創(chuàng)建,并將資源放置在里面。Resources文件夾下的資源不管是否有用,全部會打包進(jìn).apk或者.ipa,并且打包時(shí)會將里面的資源壓縮處理。加載方法是Resources.Load<T>(文件名),需要注意:文件名不包括擴(kuò)展名,打包后不能更改Resources下的資源內(nèi)容,但是從Resources文件夾中加載出來的資源可以更改。

2、Application.dataPath路徑

? 這個(gè)屬性返回的是程序的數(shù)據(jù)文件所在文件夾的路徑,例如在Editor中就是項(xiàng)目的Assets文件夾的路徑,通過這個(gè)路徑可以訪問項(xiàng)目中任何文件夾中的資源,但是在移動(dòng)端它是完全沒用。

3、Application.streamingAssetsPath路徑

? 這個(gè)屬性用于返回流數(shù)據(jù)的緩存目錄,返回路徑為相對路徑,適合設(shè)置一些外部數(shù)據(jù)文件的路徑。在Unity工程的Assets目錄下起一個(gè)名為“StreamingAssets”的文件夾即可,然后用Application.streamingAssetsPath訪問,這個(gè)文件夾中的資源在打包時(shí)會原封不動(dòng)的打包進(jìn)去,不會壓縮,一般放置一些資源數(shù)據(jù)。在PC/MAC中可實(shí)現(xiàn)對文件的“增刪改查”等操作,但在移動(dòng)端是一個(gè)只讀路徑。

4、Application.persistentDataPath路徑(推薦使用)

? 此屬性返回一個(gè)持久化數(shù)據(jù)存儲目錄的路徑,可以在此路徑下存儲一些持久化的數(shù)據(jù)文件。這個(gè)路徑可讀、可寫,但是只能在程序運(yùn)行時(shí)才能讀寫操作,不能提前將數(shù)據(jù)放入這個(gè)路徑。在IOS上是應(yīng)用程序的沙盒,可以被iCloud自動(dòng)備份,可以通過同步推送一類的助手直接取出文件;在Android上的位置是根據(jù)Project Setting里設(shè)置的Write Access路徑,可以設(shè)置是程序沙盒還是sdcard,注意:如果在Android設(shè)置保存在沙盒中,那么就必須root以后才能用電腦取出文件,因此建議寫入sdcard里。一般情況下,建議將獲得的文件保存在這個(gè)路徑下,例如可以從StreamingAsset中讀取的二進(jìn)制文件或者從AssetBundle讀取的文件寫入PersistentDatapath。

5、Application.temporaryCachePath路徑

? 此屬性返回一個(gè)臨時(shí)數(shù)據(jù)的緩存目錄,跟Application.persistentDataPath類似,但是在IOS上不能被自動(dòng)備份。

6、/sdcard/..路徑

? 表示Android手機(jī)的SD卡根目錄。

7、/storage/emulated/0/..路徑(這個(gè)路徑我查找了好久……)

? 表示Android手機(jī)的內(nèi)置存儲根目錄。

? 以上各路徑中的資源加載方式都可以用WWW類加載,但要注意各個(gè)平臺路徑需要加的訪問名稱,例如Android平臺的路徑前要加"jar:file://",其他平臺使用"file://"。以下是各路徑在各平臺中的具體位置信息:

Android平臺

Application.dataPath :? /data/app/xxx.xxx.xxx.apk

Application.streamingAssetsPath :? jar:file:///data/app/xxx.xxx.xxx.apk/!/assets

Application.persistentDataPath :? /data/data/xxx.xxx.xxx/files

Application.temporaryCachePath :? /data/data/xxx.xxx.xxx/cache

IOS平臺

Application.dataPath : ? ? ? ? ? ? ? ? ? ?Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data

Application.streamingAssetsPath : Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data/Raw

Application.persistentDataPath : ? ?Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Documents

Application.temporaryCachePath : Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Library/Caches

Windows Web Player

Application.dataPath :? file:///D:/MyGame/WebPlayer (即導(dǎo)包后保存的文件夾,html文件所在文件夾)

Application.streamingAssetsPath :?

Application.persistentDataPath :?

Application.temporaryCachePath :?文章來源地址http://www.zghlxwxcb.cn/news/detail-803591.html

到了這里,關(guān)于Unity Android 之 讀取下載獲取移動(dòng)端 sdcard 路徑下的指定文件夾的所有圖片的幾種方式的簡單整理的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java 多種獲取項(xiàng)目路徑下的文件

    Java 多種獲取項(xiàng)目路徑下的文件

    目標(biāo)文件放在項(xiàng)目的resources文件夾下 的 mytxt文件里面,文件名叫 file Test.txt: 其實(shí)可以看到,項(xiàng)目運(yùn)行后,這個(gè)文件被丟到了target文件夾下: 拿到這個(gè)文件的?InputStream : 比如我們在FileUtil里面寫個(gè)獲取文件流的方法, public class FileUtil { ? ?? } ? ① getResourceAsStream ?String

    2024年02月04日
    瀏覽(22)
  • python讀取vivo手機(jī)截圖,將滿屏圖片文件移動(dòng)別的路徑

    python讀取vivo手機(jī)截圖,將滿屏圖片文件移動(dòng)別的路徑

    問題之初 好多這樣的圖片,占用手機(jī)大量的內(nèi)存,食之無味棄之可惜!那么會復(fù)制粘貼??代碼的我們我們今天就把這些圖片篩選清理掉。 原有邏輯的基礎(chǔ)上,加入了一些有趣的注釋,以提升代碼的可讀性和娛樂性。希望您喜歡這個(gè)可愛又有趣的版本! 這個(gè)完整的 代碼可以

    2024年02月07日
    瀏覽(22)
  • 【Android實(shí)現(xiàn) 資源路徑/手機(jī)內(nèi)存/網(wǎng)絡(luò)文件 下的視頻播放】

    業(yè)務(wù)場景:安卓實(shí)現(xiàn)播放視頻的功能,支持播放不同類型資源下的視頻,下面在使用中封裝了一個(gè)方法,可以根據(jù)需要修改調(diào)用 這段代碼是一個(gè)視頻播放器的方法。根據(jù)傳入的視頻路徑和視頻類型,它會選擇不同的播放邏輯。 如果視頻類型是\\\"network\\\",則會處理網(wǎng)絡(luò)文件的播

    2024年02月16日
    瀏覽(29)
  • [通知]rust跟我學(xué)八:獲取指定目錄下的所有文件全路徑 已上線

    大家好,我是帶劍書生,開源庫get_local_info的作者。目前我的付費(fèi)專欄已經(jīng)上線,用于介紹在實(shí)現(xiàn)get_local_info過程中,遇到該問題所使用的解決方法,喜歡的朋友可以去訂閱了,19.9元,非常便宜的價(jià)格,做開源不容易。希望能幫助您在學(xué)習(xí)Rust時(shí),少走彎路,盡快進(jìn)入項(xiàng)目。

    2024年01月19日
    瀏覽(18)
  • Unity 數(shù)據(jù)讀取|(一)宏的定義和資源路徑

    在程序中我們想要根據(jù)不同的運(yùn)行環(huán)境去執(zhí)行不同的代碼時(shí)使用。比如我們在PC上和安卓上需要執(zhí)行不同的代碼,我們就可以使用Unity自帶的宏定義來區(qū)分。 定義 功能 UNITY_EDITOR 用于從游戲代碼調(diào)用 Unity 編輯器腳本的腳本符號。 UNITY_EDITOR_WIN Windows 上編輯器代碼的腳本符號。

    2024年02月05日
    瀏覽(17)
  • Android “sdcard“ File.mkdirs()失敗解決辦法

    如果File的路徑是(\\\"/sdcard/XXXX\\\"); 在AndroidManifest.xml里添加requestLegacyExternalStorag requestLegacyExternalStorag具體什么意思自己去搜

    2024年04月10日
    瀏覽(20)
  • 1.Unity中c#代碼學(xué)習(xí)(讀取物體名稱+位置+移動(dòng))

    Ctrl + K + C 批量注釋 Ctrl + K + U 批量取消注釋 Debug.Log(\\\"**\\\");輸出“**”中內(nèi)容 GameObject obj = this.gameObject; this表示當(dāng)前指代的物品 GameObject表示游戲中物體 Debug.Log(\\\"** 物體名字:\\\" + this.gameObject.name); this.gameObject.name直接調(diào)用類名 string name = obj.name; string 是c#中的字符串類型 Debug.Log(\\\"**

    2023年04月11日
    瀏覽(41)
  • Android打開系統(tǒng)文件管理器,并獲取選中文件的路徑,適配Android10及以上無法獲取路徑

    1.進(jìn)入文件管理器 2.在onActivityResult中獲取返回結(jié)果 3.FileHelper完整工具類

    2024年02月02日
    瀏覽(20)
  • unity,如何獲取鼠標(biāo)移動(dòng)

    腳本獲取鼠標(biāo)移動(dòng)信息的方法

    2024年02月08日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包