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

Unity動(dòng)態(tài)加載資源 - 從硬盤(pán)任意地址加載任意格式3D模型

這篇具有很好參考價(jià)值的文章主要介紹了Unity動(dòng)態(tài)加載資源 - 從硬盤(pán)任意地址加載任意格式3D模型。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

前言

一、Unity官方給的動(dòng)態(tài)資源加載方式

二、Unity中調(diào)用windows資源管理器

三、從資源管理器獲得文件地址后復(fù)制到Unity指定文件夾

附上全部代碼(不完善,僅框架)


前言

Unity官方給的動(dòng)態(tài)資源加載方式就不贅述了。大體分為3種:(1) Resources.Load (2)AssetBundle(3) WWW加載 。 其中前兩種大多用在本地資源加載,第三種用在web端從服務(wù)器加載。前兩種都只能從特定的文件夾下面加載資源,也就是Asset下面特定名字的幾個(gè)文件夾。

項(xiàng)目需求:打開(kāi)win資源瀏覽器,從任意目錄打開(kāi)一個(gè)任意格式3D模型,加載進(jìn)Unity主界面上。


一、Unity官方給的動(dòng)態(tài)資源加載方式

給幾個(gè)關(guān)鍵的鏈接和教程(講的都很詳細(xì)),以及官方文檔(完全沒(méi)懂在講啥),有需要的自取


Unity日常 - 資源加載與文件路徑_51CTO博客_unity動(dòng)態(tài)加載資源的方式
Unity AssetBundle 打包 四種加載方式 服務(wù)器加載_荷蘭豬小灰灰的博客-CSDN博客
AssetBundle 工作流程 - Unity 手冊(cè)

二、Unity中調(diào)用windows資源管理器

關(guān)鍵教程鏈接:

Unity對(duì)于window下的資源管理器的基本操作_unity 打開(kāi)windows資源管理器_以夢(mèng)為馬,不負(fù)韶華的博客-CSDN博客

但是這個(gè)教程中的文件格式過(guò)濾器有問(wèn)題,會(huì)導(dǎo)致在文件打開(kāi)窗口右下角的“類(lèi)型選擇”下拉表出現(xiàn)亂碼以及過(guò)濾不正確等問(wèn)題,具體格式應(yīng)該如下:

_ofn.filter = "模型文件(*.obj)\0*.obj;"
? ? ? ? ? ? + "\0模型文件(*.stl)\0*.stl;"
? ? ? ? ? ? + "\0所有支持文件(*.obj *.stl)\0*.obj;*.stl\0";

說(shuō)一下格式規(guī)則:
1、 \0*.obj 中間不能有間隔。
2、說(shuō)明文字模型文件(*.obj)和給系統(tǒng)看的?“ *.obj”一定要用 “\0” 隔開(kāi)。
3、不同的類(lèi)型之間用“;” 隔開(kāi)。

三、從資源管理器獲得文件地址后復(fù)制到Unity指定文件夾

unity 載入stl,unity,游戲引擎,c#
這里建立了一個(gè)緩存文件夾“ModelsBuffer”具體代碼如下:?

 // 如果讀取成功,轉(zhuǎn)成OBJ先放入緩存文件夾:Resources/ModelsBuffer;
? ? ? ? bool judge_FileBuffer = false;
? ? ? ? if (LocalDialog.GetOpenFileName(_ofn)){
? ? ? ? ? ? String path_Buffer = Application.dataPath + "/Resources/ModelsBuffer/";
? ? ? ? ? ? bool judge_Path = false;
? ? ? ? ? ? if (!Directory.Exists(path_Buffer)){
? ? ? ? ? ? ? ? Directory.CreateDirectory(path_Buffer);
? ? ? ? ? ? ? ? judge_Path = true;
? ? ? ? ? ? }
? ? ? ? ? ? else {
? ? ? ? ? ? ? ? judge_Path = true;
? ? ? ? ? ? }

? ? ? ? ? ? if (_ofn.fileFull.Length != 0 && judge_Path) {?
? ? ? ? ? ? ? ? String dir_FilenameFull = path_Buffer + _ofn.fileTitle;
? ? ? ? ? ? ? ? System.IO.File.Copy(_ofn.fileFull, dir_FilenameFull, true);
? ? ? ? ? ? ? ? AssetDatabase.Refresh();
? ? ? ? ? ? ? ? judge_FileBuffer = true;
? ? ? ? ? ? }
? ? ? ? ? ? else{
? ? ? ? ? ? ? ? Debug.Log("文件路徑為空或存在不支持的語(yǔ)言符號(hào)種類(lèi)");
? ? ? ? ? ? }
? ? ? ? }

?

切記Copy完文件一定要做一次AssetDatabase.Refresh(),刷新Unity的資產(chǎn)包,這樣Unity才能在Resources/ModelsBuffer文件夾下正確獲取文件。

然后再?gòu)木彺嫦录虞d,具體代碼如下:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-762047.html

  // 從緩存文件夾下加載模型;
if (judge_FileBuffer){
    String _tempFN = _ofn.fileTitle.Substring(0, _ofn.fileTitle.Length - 4);
    var _obj = Resources.Load<GameObject>("ModelsBuffer/" + _tempFN);
    if (_obj){
        var _objInstant = Instantiate(_obj);
         _objInstant.transform.localScale = Vector3.one * 30;
         _objInstant.transform.localPosition = new Vector3(10f, -11.7f, 174.7f);
    }
}

附上全部代碼(不完善,僅框架)


using UnityEditor;
using UnityEngine;
using UnityEngine.UI;

using System;
using System.IO;
using System.Collections;
using System.Runtime.InteropServices;

using FileIO;


// ------------------------------------------------ 主程序運(yùn)行類(lèi) ------------------------------------------------ //

public class LoadFiles_win10 : MonoBehaviour
{

    // ------------------------------------------------ 打開(kāi)模型;

    // 3.單擊后打開(kāi)文件瀏覽器:
    public void Click_OpenFileDialog()
    {
        //Debug.Log("getIn Click_OpenFileDialog");

        FileNameStruct _ofn = new FileNameStruct();
        _ofn.structSize = Marshal.SizeOf(_ofn);
        _ofn.filter = "模型文件(*.obj)\0*.obj;"
                    + "\0模型文件(*.stl)\0*.stl;"
                    + "\0所有支持文件(*.obj *.stl)\0*.obj;*.stl\0";
        _ofn.fileFull = new string(new char[256]);
        _ofn.maxFile = _ofn.fileFull.Length;
        _ofn.fileTitle = new string(new char[64]);
        _ofn.maxFileTitle = _ofn.fileTitle.Length;
        _ofn.initialDir = Application.streamingAssetsPath.Replace('/', '\\');//默認(rèn)路徑
        _ofn.title = "載入模型文件";
        _ofn.flags = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000008;


        // 如果讀取成功,轉(zhuǎn)成OBJ先放入緩存文件夾:Resources/ModelsBuffer;
        bool judge_FileBuffer = false;
        if (LocalDialog.GetOpenFileName(_ofn)){
            String path_Buffer = Application.dataPath + "/Resources/ModelsBuffer/";
            bool judge_Path = false;
            if (!Directory.Exists(path_Buffer)){
                Directory.CreateDirectory(path_Buffer);
                judge_Path = true;
            }
            else {
                judge_Path = true;
            }

            if (_ofn.fileFull.Length != 0 && judge_Path) { 
                String dir_FilenameFull = path_Buffer + _ofn.fileTitle;
                System.IO.File.Copy(_ofn.fileFull, dir_FilenameFull, true);
                AssetDatabase.Refresh();
                judge_FileBuffer = true;
            }
            else{
                Debug.Log("文件路徑為空或存在不支持的語(yǔ)言符號(hào)種類(lèi)");
            }
        }

        // 從緩存文件夾下加載模型;
        if (judge_FileBuffer){
            String _tempFN = _ofn.fileTitle.Substring(0, _ofn.fileTitle.Length - 4);
            var _obj = Resources.Load<GameObject>("ModelsBuffer/" + _tempFN);
            if (_obj){
                var _objInstant = Instantiate(_obj);
                _objInstant.transform.localScale = Vector3.one * 30;
                _objInstant.transform.localPosition = new Vector3(10f, -11.7f, 174.7f);
            }
        }

        // 模型文件讀取后轉(zhuǎn)入數(shù)據(jù)庫(kù);
        if (judge_FileBuffer) {
            bool judge_Read = false;
            FileIO_OBJ _io = new FileIO_OBJ();
            judge_Read = _io.read_OBJ(_ofn.fileFull);
        }


    }

    // ------------------------------------------------ 保存模型;
    public void Click_SaveFileDialog()
    {
        Debug.Log("getIn Click_SaveFileDialog");

        FileNameStruct _sfn = new FileNameStruct();

        if (LocalDialog.GetSaveFileName(_sfn))
        {
           
        }
    }


}




// ------------------------------------------- win10 文件瀏覽器調(diào)用類(lèi) ------------------------------------------- //

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]

//1.OpenFileName數(shù)據(jù)接收類(lèi):
public class FileNameStruct
{
    public int structSize = 0;
    public IntPtr dlgOwner = IntPtr.Zero;
    public IntPtr instance = IntPtr.Zero;
    public String filter = null;
    public String customFilter = null;
    public int maxCustFilter = 0;
    public int filterIndex = 0;
    public String fileFull = null;
    public int maxFile = 0;
    public String fileTitle = null;
    public int maxFileTitle = 0;
    public String initialDir = null;
    public String title = null;
    public int flags = 0;
    public short fileOffset = 0;
    public short fileExtension = 0;
    public String defExt = null;
    public IntPtr custData = IntPtr.Zero;
    public IntPtr hook = IntPtr.Zero;
    public String templateName = null;
    public IntPtr reservedPtr = IntPtr.Zero;
    public int reservedInt = 0;
    public int flagsEx = 0;
}

//2.系統(tǒng)函數(shù)調(diào)用類(lèi):
public class LocalDialog
{
    //鏈接指定系統(tǒng)函數(shù)       打開(kāi)文件對(duì)話框
    [DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
    public static extern bool GetOpenFileName([In, Out] FileNameStruct ofn);
    public static bool GetOFN([In, Out] FileNameStruct ofn) { return GetOpenFileName(ofn); }
    //鏈接指定系統(tǒng)函數(shù)        另存為對(duì)話框
    [DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
    public static extern bool GetSaveFileName([In, Out] FileNameStruct ofn);
    public static bool GetSFN([In, Out] FileNameStruct ofn) { return GetSaveFileName(ofn); }
}

到了這里,關(guān)于Unity動(dòng)態(tài)加載資源 - 從硬盤(pán)任意地址加載任意格式3D模型的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • IOS使用Unity容器動(dòng)態(tài)加載3D模型

    IOS使用Unity容器動(dòng)態(tài)加載3D模型

    項(xiàng)目背景 我們的APP是一個(gè)數(shù)字藏品平臺(tái),里面的很多藏品需要展示3D模型,3D模型里面可能會(huì)包含場(chǎng)景,動(dòng)畫(huà),交互。而對(duì)應(yīng)3D場(chǎng)景來(lái)說(shuō),考慮到要同時(shí)支持iOS端,安卓端,Unity是個(gè)天然的優(yōu)秀方案。 對(duì)于Unity容器來(lái)說(shuō),需要滿足如下的功能: 1.在APP啟動(dòng)時(shí),需要滿足動(dòng)態(tài)下載

    2024年03月18日
    瀏覽(21)
  • Unity3D中Resources動(dòng)態(tài)加載圖片

    Unity3D中Resources動(dòng)態(tài)加載圖片

    問(wèn)題:unity的Resources動(dòng)態(tài)加載就不必多說(shuō)了,這里出現(xiàn)的問(wèn)題是當(dāng)我把圖片放入Resources文件夾后,使用Resources.Load(datapath)卻并沒(méi)有出現(xiàn)圖片。 分析:由于你放在文件夾下的是圖片,是Texture2D類(lèi)型,但是實(shí)際用在u3d中的是sprite,所以需要轉(zhuǎn)換類(lèi)型。 方式: 1.在代碼中先行創(chuàng)

    2024年02月11日
    瀏覽(17)
  • Python爬取東方財(cái)富網(wǎng)任意股票任意時(shí)間段的Ajax動(dòng)態(tài)加載股票數(shù)據(jù)

    Python爬取東方財(cái)富網(wǎng)任意股票任意時(shí)間段的Ajax動(dòng)態(tài)加載股票數(shù)據(jù)

    最近由于需求想爬取以下東方財(cái)富網(wǎng)的股票數(shù)據(jù),但是發(fā)現(xiàn)沒(méi)有想象那么簡(jiǎn)單,接下來(lái)我會(huì)講述一下我遇到的問(wèn)題以及是如何解決,最后成功的爬出了想要的數(shù)據(jù)。 首先我們F12打開(kāi)東方財(cái)富網(wǎng)網(wǎng)頁(yè)源碼,以指南針(300803)為例: 我們先點(diǎn)擊 網(wǎng)絡(luò) ,再點(diǎn)擊 300803.html ,再選擇右邊

    2024年02月06日
    瀏覽(25)
  • Surface實(shí)現(xiàn)TF卡槽引導(dǎo)Ventoy加載Fydeos,不格式化硬盤(pán),不重裝Windows!

    Surface實(shí)現(xiàn)TF卡槽引導(dǎo)Ventoy加載Fydeos,不格式化硬盤(pán),不重裝Windows!

    最近買(mǎi)了一臺(tái)Suface Pro 3,裝的是Win 10系統(tǒng),4+64GB版本。 但因?yàn)閃indows的觸屏體驗(yàn)不是特別好, 所以想裝一個(gè)Windows+Android系統(tǒng)來(lái)滿足一下日常學(xué)習(xí)+娛樂(lè)。 在市面上找到一個(gè)Fydeos系統(tǒng),可以運(yùn)行安卓APP,并且fydeos團(tuán)隊(duì)對(duì)Surface全系列都做了對(duì)應(yīng)版本,所以驅(qū)動(dòng)適配會(huì)很好,于是就

    2024年02月08日
    瀏覽(69)
  • Unity 場(chǎng)景加載和資源加載

    Unity 場(chǎng)景加載和資源加載

    一個(gè)游戲往往都是由很多場(chǎng)景組成的,例如會(huì)有主界面場(chǎng)景、戰(zhàn)斗場(chǎng)景…等,不同的場(chǎng)景也是由若干的資源組合而成,在游戲的制作過(guò)程中,場(chǎng)景和資源的加載是不可或缺的。不管是場(chǎng)景還是資源都會(huì)涉及到加載的問(wèn)題,在什么時(shí)候進(jìn)行場(chǎng)景或資源的加載?場(chǎng)景的加載和資源

    2024年02月04日
    瀏覽(24)
  • Unity使用 Addressables 預(yù)加載所有資源,提現(xiàn)加載資源,發(fā)布webgl加載緩慢問(wèn)題

    Unity使用 Addressables 預(yù)加載所有資源,提現(xiàn)加載資源,發(fā)布webgl加載緩慢問(wèn)題

    Addressables 我也是剛接觸,知道的不是很多,基本的用法還是知道一些的 1 .在Window–Package Manager里找到Addressables進(jìn)行安裝 ? 2.選擇資源,點(diǎn)擊Assets中的一個(gè)資源,在Inspector面板上就會(huì)出現(xiàn)一個(gè)勾選Assressable,也就是是否加入資源打包的分組,和AssetBundle分組是一個(gè)性質(zhì)。選上以

    2023年04月08日
    瀏覽(28)
  • Unity3D 進(jìn)行任意角度調(diào)節(jié)視角

    Unity3D 進(jìn)行任意角度調(diào)節(jié)視角

    有很多小伙伴一定在初學(xué)Unity3D時(shí)遇到不小心將窗口視角打亂的情形, 例如不小心點(diǎn)擊右上角的XYZ軸導(dǎo)致視角不同, 圖1: 圖2 如何恢復(fù)至初始角度呢?比較糾結(jié)。其實(shí)不用恢復(fù)至初始角度,你點(diǎn)擊的那個(gè)坐標(biāo)按鈕,表示你想從不同的角度去看這個(gè)terrain(地形),所以可以按

    2024年02月11日
    瀏覽(88)
  • UE5 動(dòng)態(tài)加載資源和類(lèi)

    因?yàn)槭莿?dòng)態(tài)加載,所以不用在構(gòu)造的時(shí)候去加載。這里再BeginPlay里加載。 加載StaticMesh等資源,就使用LoadObjectUStaticMesh(nullptr,TEXT(\\\"Copy Reference\\\")) 加載類(lèi)資源,比如藍(lán)圖Actor類(lèi) 就使用LoadClassAActor(this,TEXT(\\\"Copy Reference\\\")) 但是同樣要在最后一個(gè)字母后+_C ?TEXT(\\\"/Script/Engine.Blueprint\\\'/Ga

    2024年02月21日
    瀏覽(23)
  • Unity資源加載方式

    Resources:邏輯資源目錄,這個(gè)目錄中的資源會(huì) 打入到包 中, 不允許熱更 。在打包時(shí)會(huì)被壓縮和加密。 加載方式:Resources.Load(常用) 、 AssetDatabase.LoadAssetAtPath等加載接口 StreamingAssets:Raw資源目錄,這個(gè)目錄中的資源也會(huì) 打入到包 中,且允許程序通過(guò)Application.streamingAsse

    2023年04月09日
    瀏覽(29)
  • Unity中資源異步加載

    ????????Unity作為一款優(yōu)秀的游戲引擎,廣泛應(yīng)用于游戲制作領(lǐng)域。在游戲的開(kāi)發(fā)過(guò)程中,資源加載的效率和流暢度尤為重要。對(duì)于較大的資源文件,同步加載方式可能會(huì)導(dǎo)致游戲卡頓、延遲等問(wèn)題。因此,采用異步加載的方法可以提高游戲的效率和用戶體驗(yàn)。 本篇博客將

    2024年02月06日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包