using TMPro; using UnityEngine; using SFB; 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[] paths) { // 사용자가 선택을 취소하지 않았는지 확인합니다. if (paths != null && paths.Length > 0 && !string.IsNullOrEmpty(paths[0])) { // 1. 선택된 첫 번째 경로를 변수에 저장합니다. selectedFolderPath = paths[0]; // 2. 화면에 표시되는 InputField 텍스트를 갱신합니다. inputDirectory.text = selectedFolderPath; // 3. 콘솔에 출력하여 확인합니다. Debug.Log("선택된 폴더 경로: " + selectedFolderPath); } else { Debug.Log("폴더 선택이 취소되었습니다."); } } public void Search() { // 1. 깃허브 UnityStandaloneFileBrowser 에셋 방식 // https://github.com/tonidurans/UnityStandaloneFileBrowser/tree/master/Package StandaloneFileBrowser.OpenFolderPanelAsync("디렉토리 선택", inputDirectory.text, false, OnSelect); // 2. 유니티 에디터 자체 기능 사용 (게임 빌드했을때 정상 작동하지 않음) // string path = EditorUtility.OpenFolderPanel("디렉토리 선택", inputDirectory.text, ""); // // // 사용자가 취소를 누르지 않고 유효한 경로를 선택했을 때만 업데이트 // if (!string.IsNullOrEmpty(path)) // { // inputDirectory.text = path; // selectedFolderPath = inputDirectory.text; // Debug.Log("선택된 경로: " + selectedFolderPath); // } // 3. DLL 라이브러리 방식 // // 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; } } }