System.Collectionsを使用しました。 System.Collections.Genericを使用しました。 System.IOを使用しました。 UnityEditorを使用しました。 UnityEngineを使用しました。 パブリッククラスThumbnaiWindow:EditorWindow { プライベート文字列OUTPATH = "資産/ TestPrefab"; 一覧<PrefabObj> m_ObjPath =新しいリスト<PrefabObj>(); 【のMenuItem( "ツール/ Thumbnais")] パブリック静的ボイドのShowWindow() { EditorWindow.GetWindow(typeof演算(ThumbnaiWindow))。 Selection.selectionChanged =()=> { DEBUG.LOG( "変化")。 }。 } プライベートベクトル2 scrollTextureView = Vector2.zero。 scrollTextureView = GUILayout.BeginScrollView(scrollTextureView)。 EditorGUILayout.BeginHorizontal(); GUILayout.Label( "导出路径:"); OUTPATH = GUILayout.TextField(OUTPATH)。 EditorGUILayout.EndHorizontal(); GUILayout.Label( "加入对象:"、EditorStyles.boldLabel)。 (I 0 = int型、iがm_ObjPath.Countを<; ++ i)について { EditorGUILayout.BeginHorizontal()。 ストリングassetPath = m_ObjPath [I] .path。 VAR OBJ = AssetDatabase.LoadAssetAtPath <ゲームオブジェクト>(assetPath)。 EditorGUI.BeginChangeCheck(); VAR newPrefab = EditorGUILayout.ObjectField(OBJ、typeof演算(ゲームオブジェクト)、偽); IF(EditorGUI.EndChangeCheck()) { VAR NEWPATH = AssetDatabase.GetAssetPath(newPrefab)。 m_ObjPath [I] .path = NEWPATH。 m_ObjPath [I] .nameの= newPrefab.name。 } IF(GUILayout.Button( "删除")) { m_ObjPath.RemoveAt(I)。 } EditorGUILayout.EndHorizontal()。 } EditorGUILayout.BeginHorizontal()。 IF(GUILayout.Button( "添加空物体")) { m_ObjPath.Add(新しいPrefabObj())。 } IF(GUILayout.Button( "添加所选对象")) { ゲームオブジェクト[] OBJS = Selection.gameObjects。 のための(INT J = 0; J <objs.Length; J ++) { AddPrefabobj(OBJS [J]); } } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); IF(GUILayout .Button( "エクスポートサムネイル")) { ExportThumbnail(); } IF(GUILayout.Button( "クリアすべての構成")) { m_ObjPath.Clear(); } EditorGUILayout.EndHorizontal(); GUILayout.EndScrollView(); } //エクスポート設定からサムネイル ます。public void ExportThumbnail() { エディタobjeditor = Editor.CreateEditor(GameObject.Find( "AA")); 以下のために(INT i = 0; I <m_ObjPath.Count; iは++) { ゲームオブジェクトOBJ = AssetDatabase.LoadAssetAtPath <ゲームオブジェクト>(m_ObjPath [I] .path)。 AssetPreview.SetPreviewTextureCacheSize(1024)。 Texture2D tempTexture = AssetPreview.GetAssetPreview(OBJ)。 もし(tempTexture == nullの|| tempTexture.isReadable!) { 続けます。 } バイト[] bytesThumbnail = tempTexture.EncodeToPNG()。 (もし!Directory.Exists(OUTPATH)) { Directory.CreateDirectory(OUTPATH)。 } FileStreamをoutputThumbnail = 新規のFileStream(OUTPATH + "/" + Path.GetFileNameWithoutExtension(m_ObjPath [I] .path)+ "_アイコン" + "の.png"、 FileMode.Create)。 outputThumbnail.Write(bytesThumbnail、0、bytesThumbnail.Length)。 outputThumbnail.Flush(); outputThumbnail.Close(); } AssetDatabase.Refresh()。 } 公共ボイドAddPrefabobj(ゲームオブジェクトOBJ) { ストリングassetPath = AssetDatabase.GetAssetPath(OBJ)。 PrefabObj prefabObj =新しいPrefabObj(); prefabObj.name = obj.name。 prefabObj.path = assetPath。 isContian = falseのブール値。 以下のために(INT i = 0; I <m_ObjPath.Count; iは++) { IF(m_ObjPath [I] .nameの== prefabObj.name) isContian = TRUE。 } ため(INT i = 0; I <m_ObjPath.Count; iは++) { IF(m_ObjPath [I] .nameの== NULL) { m_ObjPath.RemoveAt(I)。 } } もしm_ObjPath.Add(prefabObj)(isContian!)。 } publicクラスPrefabObj { パブリック文字列路と 公共の文字列名。 } }