Hello,大家好,今天給大家帶來一個小工具的編寫邏輯,U3D引擎如何批量自動創建文件夾,我是水王麥田。
1、闡述背景
開發項目的時候,經常會遇到一個問題,就是資源胡亂存放,不按照文件歸類。然後就會導致項目開發到後麵,越來越亂,維護成本越來越高。實在受不了開始整理,就像下麵一樣。一整理就是一天,甚至更多,然後傳Git,啪,各種衝突,腳本丟失,程序炸毛,Mesh missing,prefab變紅,引擎美術掏出了刀子……
這種問題,我們應該從源頭上就避免掉,從開始就規範好每個文件夾存放的路徑,每個資源存放的位置。但是每次都手動右鍵新建文件夾確實挺累的,尤其是我們一個項目是按照一個Prefab為一個單位存放的方式。所以花了一點時間搞一個小功能讓他自己去創建,豈不美哉。
首先,我們來看一下這個小工具的使用方法,我目前路徑是按照我所需要的方式去配置的,如果是美術同學想用的話,直接打開腳本文件把路徑修改了就好。路徑也可以暴露出來,但是我沒有。如果說我懶,我也認了。(完整代碼添加在最後)
2、工具預覽
打開方式如圖,這裏的路徑可改,如下圖。
這裏分別是兩個腳本,我沒有把他們寫在一起。一個是創建共用的資產文件夾,比如我們有貼圖需要共用,比如Noise,或者是需要共用的Mesh,索性一股腦都放在共用文件夾下麵。我們來看一下:
是的,隻有一個創建按鈕.......
點擊創建之後,控製台提示文件夾創建成功。
自動創建好了所有類型的文件夾。
另一個是按照Prefab為單位創建文件夾。當前Prefab所用到的所有資產,都會存在對應的路徑下,我們來看一下:
彈出了一個窗口,第一個是父級名稱,默認是Prefab(可改),比如美術資產一般會以Arts開頭,這裏就可以填寫Arts,然後資產都會被默認創建在Arts下。
輸入Prefab名稱,剛剛也說了,我是按照Prefab分類非共用資產的,所以這裏填寫的Prefab名稱,就是Arts這個目錄下的子目錄名稱,如:我填寫Pref_Test,然後點擊確定。
控製台提示我這個路徑的文件夾創建成功,並且創建好了對應的空文件夾。
3、實現方式
下麵我們來看一下實現方式:
直接說Prefab的代碼,因為創建Public類型的裏麵其實都囊括了。
首先,我們引用進命名空間,第一個是是必須引用的,第三個是編輯器擴展支持。第二個是在Visual C# .NET 中讀取文本文件打開和讀取文件進行讀取訪問是輸入/輸出 (IO) 功能的一個非常重要的部分。說通俗點其實就是你想創建文件夾,這個不是引擎層麵的,是操作係統層麵的讀和寫。
接著往下看:我把代碼折疊起來,主要看到隻有一個繼承了Editorwindow的class類,然後這個類裏麵有三個方法,AddWindow , OnGUI 和GenerateFolder ,其中OnGUI是Unity自帶的繼承方法。其他兩個是自定義方法。
我們看一下第8行,這一行MenuItem這個類(MenuItem是編輯器屬性(Editor Attributes)類,所以在使用之前要添加一句:using UnityEditor;)是定義當前工具打開的位置。後麵必須跟隨路徑。
下麵,我們開始第一個方法,寫好窗口,這裏定義了一個長寬300-500的Rect,然後調用GetWithRect創建出來。
然後聲明兩個私有字段,第一個默認叫Prefab,也就是一開始窗口打開時默認的字,如果修改成Art,那就是會創建在Arts下。
第二個方法:重寫了OnGUI方法,(EditorGUILayout.Space(20);)是指當前的空格距離,20是界麵上距離上一個GUI塊為20,然後分別給兩個字段聲明,由用戶傳入進來。
然後接著用if做一次判斷,這是一個條件語句:如果點擊了創建按鈕,並且這兩個字段不為空,則運行(GenerateFolder)方法,並且展示創建成功GUI。如果有一個條件不滿足(如有一個字段為空),則運行下一個if,彈出警告GUI,並且控製台打印錯誤警告。
最後一個方法:創建文件夾方法。
首先我們定義一個字段並且拿到這個API,返回路徑(即Unity的最外路徑Assets),然後創建在Arts下麵。”/”是一個轉義字符,代表下一層,分別是用戶輸入進來的字段。
然後調用Directory.CreateDirectory方法,當前目錄的創建其他的文件夾。這裏的目錄和路徑如果想改成自己要用的話,都是可以改的。
最後,調用refresh方法,刷新一次當前已修改的數據,並且打印Log。
4、完整代碼
using UnityEngine;
using System.IO;
using UnityEditor;
using System;
public class Createfolder_Prefab : EditorWindow
{
[MenuItem("XRRender/CreateFolder/Create_Prefab_Folder")]
public static void addWindow()
{
Rect wr = new Rect(0, 0, 300, 500);
Createfolder_Prefab window =
(Createfolder_Prefab) EditorWindow.GetWindowWithRect(typeof(Createfolder_Prefab), wr, true,
"創建Prefabs常用文件夾");
window.Show();
}
private string text1 = "Prefabs";
private string text2;
void OnGUI()
{
EditorGUILayout.Space(20);
text1 = EditorGUILayout.TextField("輸入父層級名稱:", text1);
EditorGUILayout.Space(20);
text2 = EditorGUILayout.TextField("輸入Prefab名稱:", text2);
EditorGUILayout.Space(50);
if (GUILayout.Button("創建", GUILayout.Width(80), GUILayout.Height(40)) && !string.IsNullOrWhiteSpace(text1) && !string.IsNullOrWhiteSpace(text2))
{
GenerateFolder();
//打開一個通知欄
this.ShowNotification(new GUIContent("創建成功"));
}
if (string.IsNullOrWhiteSpace(text1) || string.IsNullOrWhiteSpace(text2))
{
this.ShowNotification(new GUIContent("字符不能為空或符號"));
Debug.LogWarning("<color=red><b>字符不能為空或符號</b></color>");
}
}
private void GenerateFolder()
{
string prjPath = Application.dataPath + "/" + "Arts" + "/" + text1 + "/" + text2;
Directory.CreateDirectory(prjPath + "/" + "Textures");
Directory.CreateDirectory(prjPath + "/" + "Materials");
Directory.CreateDirectory(prjPath + "/" + "Models");
Directory.CreateDirectory(prjPath + "/" + "Prefabs");
Directory.CreateDirectory(prjPath + "/" + "Shaders");
Directory.CreateDirectory(prjPath + "/" + "Materials");
Directory.CreateDirectory(prjPath + "/" + "Animations");
Directory.CreateDirectory(prjPath + "/" + "Audios");
Directory.CreateDirectory(prjPath + "/" + text2 + "_Sence");
//刷新unity資源顯示
AssetDatabase.Refresh();
Debug.Log("Arts/"+text1 + "/"+text2+"文件夾" + "<color=green><b>創建成功</b></color>");
}
}
這個小工具比較簡單。基本就是調調API。希望對各位看官有所幫助。
- End -
來源:Thepoly公眾號
上一篇 Unity如何預定義UI?
下一篇 Unity動畫係統設計介紹(上)
熱門課程
專業講師指導 快速擺脫技能困惑相關文章
多種教程 總有一個適合自己專業問題谘詢
你擔心的問題,火星幫你解答這篇文章詳細介紹了如何學習使用UE4進行可視化製作,以及火星時代教育對此方麵培訓的專業性
麵對繁多的移動端UI培訓機構,如何選擇一個適合自己的呢? 本文將為你解答疑問,而火星時代教育,我們敢說是最好的選擇!
基於火星時代教育的高質量課程體驗, 揭示遊戲開發的前瞻性和職業發展前景。
以UE4作為工具來建構智慧城市,能大大提高其實用性和創新性。火星時代教育通過專業的UE4課程培訓來助力學習者掌握UE4建構智慧城市的技巧。
對於很多熱愛製作遊戲特效的朋友來說,擔心的一個問題就是,學習遊戲特效需要多少時間?火星時代教育為您詳細分析和解答。
了解影視原畫設計的基本知識和學習路徑,尤其是在火星時代教育的專業指導下,你將擁有更好的學習體驗。
1. 打開微信掃一掃,掃描左側二維碼
2. 添加老師微信,馬上領取免費課程資源
同學您好!