using System; using TMPro; using UnityEngine; using System.Drawing; using System.Windows.Forms; using SFB; using Unity.VisualScripting; using UnityEditor; public class DirectorySelect : MonoBehaviour { const string BASIC_DIRECTORY = "C://"; public string selectedFolderPath; // OS별 기본 경로를 const 대신 static readonly 또는 private 필드로 정의 private static readonly string WINDOWS_DIRECTORY = "C:\\"; // Windows 경로는 이중 백슬래시를 사용하거나 @"C:\" 형태로 사용하는 것이 일반적입니다. private static readonly string MAC_LINUX_DIRECTORY = "/Users/"; // macOS/Linux의 일반적인 사용자 홈 디렉토리 시작점 TMP_InputField inputDirectory; // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { inputDirectory = GetComponentInChildren(); // OS에 맞는 기본 경로 설정 string basicDirectory = GetBasicDirectory(); inputDirectory.text = basicDirectory; } private void OnSelect(string[] path) { Debug.Log(path.ToString()); if (path.Length > 0) { selectedFolderPath = path[0]; } } public void Search() { // 유니티 에디터 자체 기능 사용 작동함...ㅠ EditorUtility.OpenFolderPanel("디렉토리 선택", inputDirectory.text, ""); // StandaloneFileBrowser.OpenFolderPanelAsync("", "", false, OnSelect); // // Windows // if (UnityEngine.Application.platform == RuntimePlatform.WindowsPlayer || // UnityEngine.Application.platform == RuntimePlatform.WindowsEditor) // { // FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog(); // folderBrowserDialog.Description = "디렉토리 선택"; // // if (folderBrowserDialog.ShowDialog() == DialogResult.OK) // { // selectedFolderPath = folderBrowserDialog.SelectedPath; // } // } // // macOS (OSX) 및 Linux // else if (UnityEngine.Application.platform == RuntimePlatform.OSXPlayer || // UnityEngine.Application.platform == RuntimePlatform.OSXEditor || // UnityEngine.Application.platform == RuntimePlatform.LinuxPlayer || // UnityEngine.Application.platform == RuntimePlatform.LinuxEditor) // { // // 1. OpenFolderPanelAsync를 사용하여 폴더 선택 팝업을 띄웁니다. // // 비동기 방식이므로, 팝업이 닫힐 때 실행될 콜백 함수를 인자로 넘깁니다. // StandaloneFileBrowser.OpenFolderPanelAsync( // "경로를 선택하세요", // 팝업 창 제목 // inputDirectory.text, // 시작 경로: 현재 inputField의 경로를 기본값으로 사용 // false, // 다중 선택 허용 여부 (false: 폴더 1개만 선택) // (string[] paths) => { // // 2. 팝업이 닫힌 후 실행되는 콜백 함수 (람다 표현식) // if (paths.Length > 0 && !string.IsNullOrEmpty(paths[0])) // { // // 선택된 경로가 있다면 // selectedFolderPath = paths[0]; // // // InputField에 선택된 경로를 업데이트합니다. // if (inputDirectory != null) // { // inputDirectory.text = selectedFolderPath; // } // // Debug.Log("선택된 폴더 경로: " + selectedFolderPath); // } // else // { // // 선택 취소됨 // Debug.Log("폴더 선택이 취소되었습니다."); // } // } // ); // } // else // { // // 기타 플랫폼 (예: WebGL, Android, iOS) // // macOS/Linux와 동일한 경로를 기본값으로 사용하거나, // // 해당 플랫폼에 맞는 다른 경로를 반환할 수 있습니다. // // return MAC_LINUX_DIRECTORY; // } } // Update is called once per frame void Update() { } /// /// 현재 실행 환경의 OS에 맞는 기본 경로를 반환합니다. /// string GetBasicDirectory() { // Application.platform을 사용하여 현재 OS를 확인합니다. // RuntimePlatform.OSXEditor, RuntimePlatform.OSXPlayer, // RuntimePlatform.LinuxEditor, RuntimePlatform.LinuxPlayer 등 여러 플랫폼이 있습니다. // macOS와 Linux는 파일 시스템 구조가 유사합니다 (슬래시 / 사용). // 유니티 편집기(Editor)나 빌드된 플레이어(Player) 모두에서 확인 가능합니다. if (UnityEngine.Application.platform == RuntimePlatform.WindowsPlayer || UnityEngine.Application.platform == RuntimePlatform.WindowsEditor) { // Windows return WINDOWS_DIRECTORY; } else if (UnityEngine.Application.platform == RuntimePlatform.OSXPlayer || UnityEngine.Application.platform == RuntimePlatform.OSXEditor || UnityEngine.Application.platform == RuntimePlatform.LinuxPlayer || UnityEngine.Application.platform == RuntimePlatform.LinuxEditor) { // macOS (OSX) 및 Linux return MAC_LINUX_DIRECTORY; } else { // 기타 플랫폼 (예: WebGL, Android, iOS) // macOS/Linux와 동일한 경로를 기본값으로 사용하거나, // 해당 플랫폼에 맞는 다른 경로를 반환할 수 있습니다. return MAC_LINUX_DIRECTORY; } } }