Единство | Отворете диалоговия прозорец на файла, за да изберете файлове в пакет

Unity Open File Dialog Select Files Batch



Написах статия в блога на Сина Отворете диалоговия прозорец на файла, за да изберете файлове в пакет Статия, но за съжаление блогът Sina не може да пише код. По това време обаче беше твърде млад и не се чувстваше неудобно, докато не срещнах CSDN ... emmm, не искам да бъда в него, затова го актуализирам тук и добавих други методи:

  • Оригинален метод един

1. Изходният код е както следва:



System.Windows.Forms.OpenFileDialog dlg = new System.Windows.Forms.OpenFileDialog() dlg.Multiselect = true dlg.RestoreDirectory = false dlg.ValidateNames = true dlg.FilterIndex = 1 dlg.Filter = 'Image file (*.jpg*.png*.jpeg)|*.jpg*.png*.jpeg|pdf file|*.pdf|All files|*.' //' Text files|*.*|C# files|*.cs|All files|*.*'// 'Image files or PDF files (*.jpg*.png*.jpeg*.pdf)|*. jpg*.png*.jpeg*.pdf' dlg.InitialDirectory = 'C:\' dlg.Title = 'Please select a picture or pdf to be recognized' if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { for (int i = 0 i

2. Недостатъци: стилът на прозореца е стар и има проблем с операцията след опаковането (папката не се вижда):





  • Оригинален метод втори

1. Изходният код е както следва:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] public class OpenFileName { public int structSize public IntPtr dlgOwner public IntPtr instance public string filter public string customFilter public int maxCustFilter public int filterIndex public string file public int maxFile public string fileTitle public int maxFileTitle public string initialDir //Open path null public string title public int flags public short fileOffset public short fileExtension public string defExt public IntPtr custData public IntPtr hook public string templateName public IntPtr reservedPtr public int reservedInt public int flagsEx } void OpenOfnInit() Openofn = new OpenFileName() Openofn.structSize = Marshal.SizeOf(Openofn) Openofn.dlgOwner = DllScript.GetForegroundWindow() Openofn.filter = 'Image file or PDF file (*.jpg*.png*.jpeg*.pdf)*.jpg*.png*.jpeg*.pdf' Openofn.file = new string(new char[1024]) Openofn.maxFile = Openofn.file.Length Openofn.fileTitle = new string(new char[64]) Openofn.maxFileTitle = Openofn.fileTitle.Length Openofn.initialDir = 'C:\' Openofn.title = 'Select image or PDF file' Openofn.defExt = 'PDF' Openofn.flags = 0x00080000 [DllImport('Comdlg32.dll', SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)] public static extern bool GetOpenFileName([In, Out] OpenFileName ofn) if (GetOpenFileName(Openofn)) { string[] SplitStr = { '' } string[] strs = Openofn.file.Split(SplitStr, StringSplitOptions.RemoveEmptyEntries) for (int i = 0 i

2. Недостатъци: Само 32-битови файлове могат да бъдат избрани само с един избор: премахнете 0x00000200

  • Метод 3: Може да се използва само в прозореца на редактора на Unity
string[] fliter = {'picture or pdf', 'jpg*.png*.jpeg*.pdf' } string path = UnityEditor.EditorUtility.OpenFilePanelWithFilters('Overwrite with png', 'C:\', fliter)
  • За метод първи добавете метод за отваряне на папката:
System.Windows.Forms.FolderBrowserDialog _dlg = new System.Windows.Forms.FolderBrowserDialog() if (_dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { Debug.Log(_dlg.SelectedPath) }