Unity 做出來的軟件怎么能有自己的文件系統(tǒng)呢或颊?下面筆者將簡(jiǎn)單的教大家怎么實(shí)現(xiàn)這個(gè)功能。
需求:
- 自定義一個(gè)文件類型,后綴名是 :“.bian”
- 新建一個(gè)以 “.bian”結(jié)尾的文件
- 雙擊這個(gè)文件,自動(dòng)打開Unity 游戲引擎開發(fā)的軟件色解,并獲取這個(gè)文件的路徑
- 有了路徑,就能用Unity開發(fā)的軟件打開這個(gè)文件了(本文不做討論)餐茵。
實(shí)現(xiàn):
我們需要了解的知識(shí)點(diǎn):
- Unity Standalone Enviroment.CommandLineArgs
見擴(kuò)展閱讀 第 1 條科阎。 - 怎么注冊(cè) 文件系統(tǒng)
見擴(kuò)展閱讀 第 2 條。 - 怎么從 第 1 點(diǎn)中獲取自定義文件的路徑
第一步告訴我們忿族,Unity 打包的APP 命令行的參數(shù)是以空格隔開的锣笨,也就是說蝌矛,如果你的文件的路徑中存在空格呀,那恭喜你错英,你的路徑將不能一次性獲取到入撒。
這個(gè)問題筆者也遇到了,我使用了正則表達(dá)式處理它:
void Start()
{
string[] args = System.Environment.GetCommandLineArgs();
string cmdChain = args.Aggregate((a, b) => a + " " + b); //使用空格鏈接這些參數(shù)椭岩,生成一整行的命令
if (args.Length > 1&&!string.IsNullOrEmpty(args[1])) //如果參數(shù)2個(gè)及以上且第二個(gè)參數(shù)有效
{
//單行匹配模式
MatchCollection match = Regex.Matches(cmdChain, @"\.exe ([A-Za-z]:.+\.bian)", RegexOptions.Singleline);
if (match.Count > 0 && match[0].Groups.Count > 0)
{
text.text = match[0].Groups[1].Value; //匹配分組中拿到正確的文件路徑
}
}
}
Tips:
- 原來是空格的茅逮,依舊用空格鏈接他們,生成一條長(zhǎng)長(zhǎng)的參數(shù)鏈:cmdChain
- 然后看到這樣的一個(gè)規(guī)律:這條 cmdChain 中我們想要的那個(gè)文件路徑呀就在 .exe和 .bian之間(包含.bian)判哥。
- 根據(jù)發(fā)現(xiàn)的規(guī)律献雅,很容易想到編寫正則表達(dá)式處理嘛。
- 怎么打開自定義的文件
一步步走來塌计,你就在unity開發(fā)的APP里面拿到了雙擊的文件的路徑挺身,想怎么打開自定義的文件那可就見仁見智咯!
譬如筆者就想用zip打包的方式封裝文件 锌仅,里面包括一個(gè)json描述文件瞒渠,幾個(gè)文件夾,一些資源文件技扼。是不是有點(diǎn)AssetBundle的理念?其實(shí)很多文件都是這種理念了嫩痰,比如Excel(我見過有人解壓Excel的剿吻,噗~)。
動(dòng)畫
由于文末提供了GitHub倉(cāng)庫(kù)串纺,筆者就不講太多丽旅,下面直接動(dòng)畫演示本文提及的項(xiàng)目都實(shí)現(xiàn)了什么。
加載自定義文件系統(tǒng)
卸載自定義文件系統(tǒng)
文件打開方式發(fā)生變動(dòng)
擴(kuò)展閱讀
- C# 注冊(cè)自定義文件類型 實(shí)現(xiàn)自定義文件類型關(guān)聯(lián)默認(rèn)應(yīng)用程序 - 郎涯工作室 - CSDN博客
- Unity3D-獲取命令行啟動(dòng)參數(shù) - 游戲人生 - CSDN博客
- C#讀纺棺,寫榄笙,刪除注冊(cè)表 - jingxuan84的專欄 - CSDN博客
- RegistryKey Class (Microsoft.Win32) | Microsoft Docs
- C# 自定義文件格式并即時(shí)刷新注冊(cè)表 非關(guān)閉explorer - zhangtirui的專欄 - CSDN博客
寫到最后
本文GitHub工程地址 Bian-Sh/FileSystem4UnityStandaloneApp
也不知對(duì)親有沒有什么幫助呢!
標(biāo)簽: Unity Runtime standalone 打開自定義文件 自定義文件系統(tǒng) 自定義后綴名