오늘은 유니티에서 로컬 파일을 불러오는 작업을 수행해보고자 한다. 파일을 불러오는 작업이 간단하게 될 줄 알았는데 dll활용하거나 구현하는 예제들 위주로 구글링되어 당황스러워서 포스팅을 하게 됬다. 먼저 File Browser 는 아래를 활용하였다. File Browser의 경우 버튼을 클릭하여 여는 것이 일반적일 것이기 때문에 간단하게 포스팅을 해보고자 한다.

GitHub - yasirkula/UnitySimpleFileBrowser: A uGUI based runtime file browser for Unity 3D (draggable and resizable)
A uGUI based runtime file browser for Unity 3D (draggable and resizable) - GitHub - yasirkula/UnitySimpleFileBrowser: A uGUI based runtime file browser for Unity 3D (draggable and resizable)

패키지 설치

window > package manager 를 클릭하여 아래와 같이 뜬다면 + 버튼을 눌러 add package from git URL을 클릭하고  https://github.com/yasirkula/UnitySimpleFileBrowser 해당 주소를 넣어 설치해준다.

버튼 만들기

Hierarchy > UI > Button 을 클릭해주자. 그럼 기본 버튼이 생겼을 것이다. 우리는 버튼을 클릭(On Click) 할 때 스크립트가 실행되게 하는 것이 목적이기 때문에 Onclick에서 사용될 빈 Object를 만들어보자. Object 이름은 마음대로 해도되나 Browser로 하겠다. 참고로 스크립트와 오브젝트명이 동일할 필요는 없다. 여기까지 되었다면 아래와 같이 Hirarchy와 Inspector가 되었을 것이다.

Browser Object에 스크립트 매칭하기

아래 코드는 위에서 제공하는 예제 코드이다. Assets에서 우클릭을 하여 Create> C# script를 클릭하여 아래 스크립트를 생성해보자. 파일명은 클래스명과 동일하여야한다. 나의 경우에는 Browser.cs에 해당한다.

참고로 Script가 너무 많으면 관리하기 힘들어지므로 목적에 맞게 Assets 하위에 scripts와 같은 폴더를 구성하여 관리하여도 된다.

using UnityEngine;
using System.Collections;
using System.IO;
using SimpleFileBrowser;

public class Browser : MonoBehaviour
{
	public void OpenBrowser()
	{
		FileBrowser.SetFilters(true, new FileBrowser.Filter("Images", ".jpg", ".png"), new FileBrowser.Filter("Text Files", ".txt", ".pdf"));
		FileBrowser.SetDefaultFilter(".jpg");
		FileBrowser.SetExcludedExtensions(".lnk", ".tmp", ".zip", ".rar", ".exe");
		FileBrowser.AddQuickLink("Users", "C:\\Users", null);
		StartCoroutine(ShowLoadDialogCoroutine());
	}

	IEnumerator ShowLoadDialogCoroutine()
	{
		yield return FileBrowser.WaitForLoadDialog(FileBrowser.PickMode.FilesAndFolders, true, null, null, "Load Files and Folders", "Load");
		Debug.Log(FileBrowser.Success);

		if (FileBrowser.Success)
		{
			for (int i = 0; i < FileBrowser.Result.Length; i++)
				Debug.Log(FileBrowser.Result[i]);

			byte[] bytes = FileBrowserHelpers.ReadBytesFromFile(FileBrowser.Result[0]);

			string destinationPath = Path.Combine(Application.persistentDataPath, FileBrowserHelpers.GetFilename(FileBrowser.Result[0]));
			FileBrowserHelpers.CopyFile(FileBrowser.Result[0], destinationPath);
		}
	}
}

스크립트를 생성하였다면 이제 Browser 오브젝트에 연결해보자.

Hierarchy에서 Browser를 클릭하면 Inspector가 뜰텐데 여기에 방금 만든 Browser.cs 코드를 Add Component에 드래그해서 올려놓으면 연결이된다.

버튼에 On Click 만들기

Button Object를 클릭하면 Inspector에 Button안에 On Click이 숨어있다. 여기서 + 버튼을 눌러보자

Runtime Only 밑에 None(Object) 가 생겼을 텐데 Hierarchy에 있는 Browser를 드래그하여 올려보자.

이제 No Function을 클릭하고 아래의 OpenBrowser를 클릭해보자. 클릭 이벤트가 발생하면 아까 만든 Browser 스크립트에 OpenBrowser를 실행한다는 의미이다.

상단에 재생 버튼을 누르면 Game 창으로 넘어가며 아래와 같이 나타나는데, Button버튼을 누르면 파일 선택창이 열리는 걸 볼 수 있다.

Build 하기

file >Build Settings > Build를 클릭하고 경로를 설정하면 exe file이 생성이 된다. 해당 경로에 가게 되면 아래와 같이 파일들이 생성됨을 확인 할 수 있다.