Unity

[Unity] WebGL csv 파일 다운로드하기

JiHxxn 2024. 6. 25. 18:20

1. Info Set

  • csv에 들어갈 정보를 담아준다.

2. WebGL 빌드 후 Download

  • 버튼 클릭 → csv Export 함수를 작동

3. csv 파일 확인

  • 스크립트에서 적용한 내용들 csv 파일로 Export 완료

Unity C#

using UnityEngine;
using System.Text;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public class CSVExport : MonoBehaviour
{
    [SerializeField] private List<TalkAddText> TalkAddText;

    [DllImport("__Internal")]
    private static extern void OpenFileBrowser(string data);

    string data;

    void Start()
    {
        TalkAddText = new List<TalkAddText>();
        TalkAddText.Add(new TalkAddText("1", "1"));
        TalkAddText.Add(new TalkAddText("2", "2"));
        TalkAddText.Add(new TalkAddText("3", "3"));

        Write();
    }

    private void Update()
    {
				// 키보드 6번 버튼 클릭 시 다운로드 함수 작동
        if (Input.GetKeyDown(KeyCode.Alpha6))
        {
            OpenFileBrowser(data);
        }
    }

    // CSV 파일로 내보내기
    private List<string[]> rowData = new List<string[]>();
    void Write()
    {
        // 첫 번째 행 적용
        string[] rowDataTemp = new string[3];
        rowDataTemp[0] = "key";
        rowDataTemp[1] = "talker";
        rowDataTemp[2] = "talk";
        rowData.Add(rowDataTemp);

        // 정보 적용
        for (int i = 0; i < TalkAddText.Count; i++)
        {
            rowDataTemp = new string[3];
            rowDataTemp[0] = "Student" + i; 
            rowDataTemp[1] = TalkAddText[i].talker;
            rowDataTemp[2] = TalkAddText[i].talk;
            rowData.Add(rowDataTemp);
        }

        string[][] output = new string[TalkAddText.Count + 1][];

        for (int i = 0; i < output.Length; i++)
        {
            output[i] = rowData[i];
        }

        int length = output.GetLength(0);
        string delimiter = ",";

        StringBuilder sb = new StringBuilder();

        for (int index = 0; index < length; index++)
        {
            sb.AppendLine(string.Join(delimiter, output[index]));
        }

        // JavaScript에 보내줄 data
        data = sb.ToString();
		}
}

 

JavaScript(jslip)


mergeInto(LibraryManager.library, {

  OpenFileBrowser: function(data) {
   const str = "\\uFEFF" + UTF8ToString(data);
  
  const blob = new Blob([str], {type: 'text/csv;charset=utf-8;'});
  const url = URL.createObjectURL(blob);
  
  const element = document.createElement('a');
  element.href = url;
  element.download = 'EscaperoomResult.csv';
  
  element.click();
  },
  
});

📒 참고자료

WebGL: 브라우저 스크립트와 상호작용 - Unity 매뉴얼

 

WebGL: 브라우저 스크립트와 상호작용 - Unity 매뉴얼

웹용 콘텐츠를 빌드할 때 웹페이지의 다른 요소와 통신해야 할 수 있습니다. 또는 Unity 에디터가 현재 기본적으로 노출하지 않는 웹 API를 사용하여 기능을 구현하고 싶을 수 있습니다. 두 가지

docs.unity3d.com