はじめに
今回はファイル・フォルダ選択パネルに関係する6つのメソッドについて紹介をしたいと思います。
- EditorUtility.OpenFolderPanel
- EditorUtility.OpenFilePanel
- EditorUtility.OpenFilePanelWithFilters
- EditorUtility.SaveFolderPanel
- EditorUtility.SaveFilePanel
- EditorUtility.SaveFilePanelInProject
EditorUtility-OpenFolderPanel - Unity スクリプトリファレンス
EditorUtility-OpenFilePanel - Unity スクリプトリファレンス
EditorUtility-OpenFilePanelWithFilters - Unity スクリプトリファレンス
EditorUtility-SaveFilePanel - Unity スクリプトリファレンス
EditorUtility-SaveFilePanelInProject - Unity スクリプトリファレンス
EditorUtility-SaveFolderPanel - Unity スクリプトリファレンス
OpenFolderPanelとSaveFolderPanel
フォルダ選択パネルに関係したメソッドは以下の2つあります。
- EditorUtility.OpenFolderPanel
- EditorUtility.SaveFolderPanel
public static string OpenFolderPanel (string title, string folder, string defaultName); public static string SaveFolderPanel (string title, string folder, string defaultName);
// OpenFolderPanel
"open folder"ダイアログを表示し、選択されたパスを取得します// SaveFolderPanel
プロジェクトのアセットフォルダーから始まる"save folder"ダイアログを表示し、選択したファイルのパス名を取得します
具体的に説明していきます。
// サンプルコード public class SampleWindow : EditorWindow { [MenuItem("Tools/SampleWindow")] private static void CreateWindow() { GetWindow<SampleWindow>(); } private void OnGUI() { if (GUILayout.Button("Open Folder Panel")) { var selectedPathName = EditorUtility.OpenFolderPanel(title: "Title", folder: "", defaultName: ""); Debug.Log(selectedPathName); Debug.Log("Click Cancel Button: " + string.IsNullOrEmpty(selectedPathName)); } } }
キャンセルを押すと空文字を返し、フォルダを選択するとパスを返します。
MacだとOpenFolderPanel
もSaveFolderPanel
も同じようなFinder
が表示されるようですね。
引数の説明は以下の通り。
引数名 | 意味 |
---|---|
title | Explorer(Finder)の上に表示されるタイトル |
folder | 最初に選択しておくフォルダへのパス(例.Assets/Scripts ,プロジェクト外は絶対パス指定) |
defaultName
に関してはちゃんとした情報が出回っていなく、私自身もいくつか試してみましたがよく分かりませんでした。
一応中国の方が以下のように述べていたので載せておきます。
第三个参数defaultName:打开窗口时,“文件夹:”后的默认内容:
// DeepL翻訳
第3パラメータ defaultName:ウィンドウを開いたときの "folder: "以降のデフォルトの内容。
Unity Editor【Open Folder Panel】- 打开选择文件夹窗口并记录文件夹路径_CoderZ1010的博客-CSDN博客_openfolderpanel
OpenFilePanel(WithFilters)とSaveFilePanel(InProject)
次にFile
に関連したメソッドを紹介します。
- EditorUtility.OpenFilePanel
- EditorUtility.OpenFilePanelWithFilters
- EditorUtility.SaveFilePanel
- EditorUtility.SaveFilePanelInProject
public static string OpenFilePanel (string title, string directory, string extension); public static string OpenFilePanelWithFilters (string title, string directory, string[] filters); public static string SaveFilePanel (string title, string directory, string defaultName, string extension); public static string SaveFilePanelInProject (string title, string defaultName, string extension, string message);
// OpenFilePanel
"open file"ダイアログを表示し、選択されたパスを取得します// OpenFilePanelWithFilters
"open file"ダイアログを表示し、選択されたパスを取得します// SaveFilePanel
"save file"ダイアログを表示し、選択されたパスを取得します// SaveFilePanelInProject
プロジェクトのアセットフォルダーから始まる"save file"ダイアログを表示し、選択したファイルのパス名を取得します
実際に使ったサンプルコードは以下の通り。
// OpenFilePanel (パネルのタイトルを"Title"にし。Assets/Scriptsフォルダを最初に開いておき、拡張子は.csのみ選択できるようにしておく) var selectedPathName = EditorUtility.OpenFilePanel(title: "Title", directory: "Assets/Scripts", extension: "cs"); Debug.Log(selectedPathName); Debug.Log("Click Cancel Button: " + string.IsNullOrEmpty(selectedPathName));
// OpenFilePanelWithFilters // title : ダイアログのタイトル // directory : デフォルトディレクトリ // filters : 対象の拡張子(複数種類の拡張子を指定できる).なんでこんな指定方法にしたの... var selectedPathName = EditorUtility.OpenFilePanelWithFilters(title: "Title", directory: "Assets/Scripts", filters: new[] { "Image files", "png,jpg,jpeg", "Scripts files", "cs" }); Debug.Log(selectedPathName); Debug.Log("Click Cancel Button: " + string.IsNullOrEmpty(selectedPathName));
// SaveFilePanel var selectedPathName = EditorUtility.SaveFilePanel(title: "Title", directory: "Assets/Scripts", defaultName: "Sample.cs", extension: "cs"); Debug.Log(selectedPathName); Debug.Log("Click Cancel Button: " + string.IsNullOrEmpty(selectedPathName));
// SaveFilePanelInProject var selectedPathName = EditorUtility.SaveFilePanelInProject(title: "Title", defaultName: "Sample.cs", extension: "cs", message: "Message"); Debug.Log(selectedPathName); Debug.Log("Click Cancel Button: " + string.IsNullOrEmpty(selectedPathName));
EditorUtility.OpenFilePanelWithFilters
のfilters
は"説明", "拡張子"
みたく記述するようです。なんでこんなめんどくしたのかは謎です。
さいごに
EditorUtility
は名前の通りUnityEditor.dll
入っているので、エディタ上でないと動作しません。注意してください。
docs.unity3d.com