のにっき

Excelで出力したCSVファイルをUnityで読み込むまで

今回は、Excelで出力したファイルをUnityで読み込む方法です

Unityで読み込めるのは文字コードが「UTF-8」のファイル!

エクセルから、通常の方法でテキストファイルを出力すると、
文字コードは「UTF-8」にはなりません
したがって、Unityで読み込めないファイルとなってしまいます

Excelで、文字コードを指定してテキストファイルを
出力する方法をご紹介します。

ExcelからCSVファイル出力
  • 事前準備

ExcelVisualBasicからエディターを開く
「ツール」→「参照設定」をクリック
下記の画像を参考に「Microsoft ActiveX Data Objects 6.1 Library」にチェック

f:id:apuridasuo:20190409183759p:plain
図:参照追加方法

'*******************************************************************

'モジュール名   :OutFileData
'概要           :テキストファイル出力
'引数           :st_filename As String  ファイル名
'引数           :st_DefPath As String   パス
'引数           :st_Kaku As String        拡張子
'引数           :st_outdata As String   出力データ
'戻り値         :なし

'*******************************************************************
Public Sub OutFileData(st_filename As String, st_DefPath As String, st_Kaku As String, st_outdata As String)
    '==================================================================
    ' データ定義
    '==================================================================
    Dim st_PJName As String
    Dim st_filepass As String
    Dim st_foldaname As String
    Dim i_cnt_file As Integer
    Dim i_cnt_teigi As Integer
    Dim i_cnt_youso As Integer

    '==================================================================
    ' 保存先フォルダ設定
    '==================================================================
    If st_DefPath = "" Then
        st_filepass = ThisWorkbook.Path & "\"
    Else
        st_filepass = st_DefPath & "\"
    End If
    
    '==================================================================
    ' ファイル存在判定 ※既に存在してたら削除
    '==================================================================
    st_filename = st_filepass & st_filename & "." & st_Kaku
    If Dir(st_filename) <> "" Then
        Kill st_filename
    Else
    End If

    '==================================================================
    ' ファイル出力
    '==================================================================
    ' 変数定義
    Dim obj_OutFile As New ADODB.Stream
    Dim maxRow As Integer
    ' ファイル出力
    With obj_OutFile
        ' 書き込みモード設定
        .Type = adTypeText
        .Charset = "UTF-8"
        .LineSeparator = adCRLF
        .Open
        ' データ記入
        .WriteText st_outdata, adWriteChar
        ' 閉じる
        .SaveToFile st_filename, adSaveCreateNotExist
        .Close
    End With   
    Set obj_OutFile = Nothing    
End Sub
  • 呼び方例

Call OutFileData("ファイル名" , "C:\ファイルいれるフォルダ名", ".csv" , "ファイルの中身" )
上記の呼び方で、作成したデータを
文字コードを「UTF-8」のファイルとして出力することができます。

UnityでCSVファイル読み込み
  • Unityにファイルを設定

下図のように、「Resources」フォルダにExcelで出力したファイルを設定する

f:id:apuridasuo:20190409185625p:plain
図:出力したファイルを設定する場所

  • 取得コード
    /*************************************************************************
        クラス名    : ReadTempFile
        概要        : 中間ファイル読み込み
    *************************************************************************/
    public void ReadTempFile()
    {
        //====================================================================
        // 変数定義
        //====================================================================
        string str_Path = "QuizList"; // 設定したファイル名
        string str_SetOne = "";
        TextAsset fl_Read = new TextAsset();

        //====================================================================
        // ファイル読み込み
        //====================================================================
        // csvファイルを取得
        fl_Read = Resources.Load(str_Path, typeof(TextAsset)) as TextAsset;
        StringReader reader = new StringReader(fl_Read.text);
        // 1行ごとに処理
        while (reader.Peek() > -1)
        {
            // 1行データを変数に格納
            str_SetOne = reader.ReadLine();
            //====================================================================
            // ※以下で、機種固有の処理を行って1行データを取得
            //====================================================================
        }
    }

以上です。
Excelで中間ファイルを作成して、Unityで読み込むまでができる様になります。

今回僕はマッチ棒で計算式を作るアプリを作ったのですが、
計算式の数字をエクセルで管理することで、
出題する問題の管理がとても楽にできました。

Unityでゲームを作る方には必須の知識だと思います!