iT邦幫忙

2021 iThome 鐵人賽

DAY 24
0
自我挑戰組

用unity製作2DRPG雛形-沒有大野狼的小紅帽系列 第 24

24.unity對話處理(List與class)

  • 分享至 

  • xImage
  •  

今天要做的事情就是讓系統可以分辨
哪段文字=角色,哪段文字=心情,哪段文字=對話內容!

進行文字標記,擷取文字檔案內的訊息,為了能更精確的掌握對話資訊,才能做對應的互動,取用正確的圖片。

一、建立標記規則

第一步要先建立自己的標記規則,像標記式語言那樣可以用某些符號表達某一種訊息,那我這次做很簡單的標記,只要能分出是誰說話、甚麼心情、說甚麼話三種資訊。

結構:人物心情*說話內容

例句:

小紅帽:開心*阿嬤好!

決定好標記規則之後,這套語言系統的對話文件就依照自己的規則來寫吧!

二、將規則寫成類別

第二步將規則寫成類別,然後將取得標記的資料歸類。
依造標記規則,創立對話資訊類別,取名RolePart

public class RolePart //類別,專門儲存對話資料
    {
        public string RoleName { get; set; }   //人物
        public string RoleMood { get; set; }   //心情
        public string RoleContent { get; set; }//說話內容
    }

get、set是屬性的寫法,詳情請參考C#手冊

三、用List儲存物件

第三步使用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");
	    }
	}

輸出結果
2.png


上一篇
23.unity儲存文字內容(List、foreach)
下一篇
25.unity動態加載(Resources.Load)
系列文
用unity製作2DRPG雛形-沒有大野狼的小紅帽30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言