今天要做的事情就是讓系統可以分辨
哪段文字=角色,哪段文字=心情,哪段文字=對話內容!
進行文字標記,擷取文字檔案內的訊息,為了能更精確的掌握對話資訊,才能做對應的互動,取用正確的圖片。
第一步要先建立自己的標記規則,像標記式語言那樣可以用某些符號表達某一種訊息,那我這次做很簡單的標記,只要能分出是誰說話、甚麼心情、說甚麼話三種資訊。
結構:人物:心情*說話內容
例句:
決定好標記規則之後,這套語言系統的對話文件就依照自己的規則來寫吧!
第二步將規則寫成類別,然後將取得標記的資料歸類。
依造標記規則,創立對話資訊類別,取名RolePart
public class RolePart //類別,專門儲存對話資料
{
public string RoleName { get; set; } //人物
public string RoleMood { get; set; } //心情
public string RoleContent { get; set; }//說話內容
}
get、set是屬性的寫法,詳情請參考C#手冊
第三步使用List來存取class物件,List中的每一項就是一個物件
//新增一個清單
List<RolePart> RolePartList = new List<RolePart>();
//新增清單項目,用物件添加
RolePartList.Add(new RolePart() { RoleName = "人物", RoleMood ="心情", RoleContent="說話內容"});
unity預設腳本本身就是一個類別,所以依樣是類別的規則要寫在同級。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//自訂義類別
public class RolePart {
public string RoleName { get; set; } //人物
public string RoleMood { get; set; } //心情
public string RoleContent { get; set; }//說話內容
}
//unity預設好,繼承自MonoBehaviour的類別
public class Model : MonoBehaviour {
//導入文件
public TextAsset textFile;
//新增一個清單
private List<RolePart> RolePartList = new List<RolePart>();
//得到文件文字的方法
void GetTextFormFile(TextAsset file){
//確保清單是空的
**RolePartList*.Clear();*
//讀取文件,以行為單位,用字串陣列收
string[] lineData = file.text.Split('\n');
//將陣列內的文件文字分成物件並儲存至清單
foreach (var line in lineData) {
//用:和*斷句,並且分別儲存至陣列內,將會得到人物[0]、心情[1]、對話內容[2]
char[] SplitChar ={':','*'};
string[] lineWord = line.Split(SplitChar);
//新增物件至清單,物件由陣列組成
RolePartList.Add(new RolePart() { RoleName = lineWord[0], RoleMood = lineWord[1], RoleContent=lineWord[2]});
}
//印出結果
foreach (var line in RolePartList) {
Debug.Log(line.RoleName+":"+line.RoleContent+" (心情:"+line.RoleMood +") ");
}
}
void Start() {
GetTextFormFile(textFile);
Debug.Log("end");
}
}
輸出結果