iT邦幫忙

2022 iThome 鐵人賽

DAY 27
0

平常我們會將資料進行讀取與寫入到 .csv 檔,最近因為實驗室實驗的資料需要儲存,我希望能將我過程中的一些數據能同步到 Excel 儲存,方便我之後統計各項數據。所以這兩天我將會根據如何儲存資料到 .csv 的檔案,以及如何寫入資料到 .csv 的檔案。這邊會希望大家將你想要儲存的.csv檔案記得與我們的Scene 新增的環境同一個資料夾下。 那我們就開始今天讀取資料的實作,不會很難,非常的簡單,所以讓我們趕緊開始。 (誠實來說我明天有點忙@@,所以今天就針對之前相關的功能做,抱歉><)

建置環境

  1. 首先新增一個 .csv 逗號區隔的Excel 檔案。

  2. 回到 Unity 我們可以看到該Excel 每個數值間都會有逗號間隔。

撰寫腳本

  1. 首先建置該空白物件 ReadData。接下來新增一個腳本。

  2. 接下來我們新增一個放置我們要讀取 Excel 檔的變數 textAssetData。

public TextAsset textAssetData;
  1. 而我們要透過一個List儲存各種不同 Player 的資料。
public List<string> playerList = new List<string>() ;
  1. 我們進入到主程式:
  • 首先我們要將讀取出來的資料進行 Split 區隔,也就是將逗號與換行之間的資料進行分開並儲存到我們 data 的陣列中,方便我們後續使用。
string[] data = textAssetData.text.Split(new string[]{",", "\n"}, System.StringSplitOptions.None);
  • 我們要知道目前資料的參數有哪些,比如現在有 Name, Health , Damage, Defence 所以代表我們的 行共有四個。故我們要計算一下整個資料有多少列的話,我們可以將所有的資料數除以4,代表說我們每四行要換一個使用者。也就是換下一個Player 的資料,比如現在我整體有 65格資料,每四格要取一次,因為不同的Player 包含三個不同名稱的數值。同時我們也會用 Array 紀錄該 Player 的數值。
int dataParam = 4;
int dataRoll;
dataRoll = data.Length / dataParam;   

string[] strr = new string[dataRoll];
  • 接下來就是要去存取每一列上的資料。並且若一位玩家所有資料都儲存好就將使用 List 進行存取該玩家的所有資料。
for(int i = 0 ; i < dataRoll; i++)
{
	for(int j = 4 * (i); j < 4 * (i+1); j++)
	{
		strr[i] += data[j] + " ";
	} 
	if(i > 0)
      playerList.Add(strr[i]);                        // store the player.
}
  • 最後我們Print 出該所有玩家的資料以及單一玩家的資料。
// print all data in string
for(int i = 0; i < dataRoll; i++)
{
    Debug.Log(strr[i]);
}
Debug.Log("Hi! Jacky! Your data is = > " + playerList[0]);
  1. 完整的程式碼:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ReadFromCsv : MonoBehaviour
{

    public TextAsset textAssetData;
    public Text printDataText;

    public List<string> playerList = new List<string>() ;

    void Start() 
    {
        ReadCsv();
    }

    void ReadCsv() 
    {
        string[] data = textAssetData.text.Split(new string[]{",", "\n"}, System.StringSplitOptions.None);
        int dataColumn = 4;
        int dataRoll ;
        
        print("data length: " + data.Length);
        dataRoll = data.Length / dataColumn;                          // the line of the data

        string[] strr = new string[dataRoll];
        for(int i = 0 ; i < dataRoll; i++)
        {
            for(int j = 4*i; j < 4*(i+1); j++)
            {
                strr[i] += data[j] + " ";                            // combine the string

                
            }
            if(i > 0)
                playerList.Add(strr[i]);                        // store the player.
        }
        string printPlayer = "";
        // print all data in string
        for(int i = 0; i < dataRoll; i++)
        {
            printPlayer += strr[i] + "\n";
        }
        printDataText.text = printPlayer;

        Debug.Log("Hi! " + playerList[0]);                  // need to print Jacky 
        
    }
}

顯示資料並執行

  1. 首先我們就在場景新增一個 Text。我們叫做 DataText。

  2. 接下來將其放入到我們的腳本中。

  3. 後續調整一下該 Text 的寬度與大小樣式等。看自己喜好這邊我就設定成這樣。

  4. 最終的成果如下:

結論

  1. 今天了解如何在 Unity 取出該csv 檔案中的資料並顯示在Unity 環境中。
  2. 未來將可以實現資料的讀取並更新資料後儲存回到csv檔裡面。讓整體資料的管理更加完整。

上一篇
Day26: Write to Excel .csv file
下一篇
Day28: Use Google Form to connect Unity
系列文
Unity 基本功能實作與日常紀錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言