ETH官方钱包

前往
大廳
主題

Unity 遊戲製作 - 對(duì)話系統(tǒng)開(kāi)發(fā)日誌 Day2

放課後的遊戲 | 2023-09-02 22:16:57 | 巴幣 8 | 人氣 299


前言

趁著這今天假日沒(méi)什麼事情要做,把進(jìn)度推了一下
開(kāi)始主文前先來(lái)看一下上次列出來(lái)要做的功能有哪些吧
  1. 對(duì)話內(nèi)容顯示
  2. 加速對(duì)話文字顯示
  3. 略過(guò)對(duì)話
  4. 人物立繪的顯示
  5. 人物名稱的顯示
  6. 對(duì)話文本是採(cǎi)用外部檔案存取
  7. 選擇系統(tǒng)


主文

如果以上面列出的功能的話,其實(shí)今天進(jìn)度推蠻多的
1. 2. 5. 6. 項(xiàng)的功能都完成的差不多了,然後第 4 項(xiàng)的內(nèi)容也有先建立好對(duì)應(yīng)的方法了,只是因?yàn)檫€沒(méi)有找到適合的圖片進(jìn)行測(cè)試,所以就先不列入完成清單了

今天主要內(nèi)容是將程式碼內(nèi)容完善,讓之前建立好的框架能有實(shí)際執(zhí)行的內(nèi)容。
首先是 DialogueSystem.cs 這是整個(gè)對(duì)話系統(tǒng)的對(duì)外窗口
也就是如果我們現(xiàn)在有一個(gè) NPC 要說(shuō)話,他就要呼叫這隻程式的方法,並傳入他要說(shuō)的文本檔名,來(lái)啟動(dòng)整個(gè)對(duì)話系統(tǒng)。
因?yàn)槲覀兛梢宰x取外部文本檔案來(lái)顯示對(duì)話內(nèi)容,所以傳入的資料需要是文本的檔名即可。

文本的資料架構(gòu)是放在 DialogueData.cs ,雖說(shuō)我們主要是以外部文件存取的方式去讀取文本,但實(shí)際在執(zhí)行的時(shí)候,還是將他轉(zhuǎn)換成方便處理的資料結(jié)構(gòu)。
整體流程大概是先用 Resources.LoadAll<TextAsset>(path) 去讀取所有要存取的文本,接著用 DialogueData 內(nèi)寫(xiě)的轉(zhuǎn)檔方法將 TextAsset 轉(zhuǎn)成我們需要的資料結(jié)構(gòu)。

對(duì)話系統(tǒng)的核心放在 DialogueCanvas.cs 這隻程式內(nèi),主要負(fù)責(zé)控制頁(yè)面元件的顯示內(nèi)容什麼的,都是放在裡面,不過(guò)感覺(jué)程式有點(diǎn)冗長(zhǎng),目前有在考慮要不要再做額外的拆分……
總而言之,整個(gè)對(duì)話系統(tǒng)初始化的時(shí)候,DialogueCanvas.cs 也會(huì)進(jìn)行初始化,將頁(yè)面需要的出現(xiàn)的元件也都建立完畢,以利後續(xù)的內(nèi)容顯示。
這隻程式是有繼承 MonoBehaviour 的,主要是要掛載在 DialogueCanvas 這個(gè)場(chǎng)景物件上,之所以要掛載在物件上,是因?yàn)槲乙褂?Update() 這些方法去顯示文字內(nèi)容。
可能要先另外提一下,DialogueFSM.cs 這隻程式,我有先寫(xiě)一個(gè)關(guān)於對(duì)話系統(tǒng)的狀態(tài)機(jī),目前有暫定幾個(gè)狀態(tài): 待命、準(zhǔn)備說(shuō)話、對(duì)話中、對(duì)話結(jié)束等待切換
接著透過(guò)這幾個(gè)狀態(tài)在 DialogueCanvas 的 Update() 中去判斷並調(diào)整顯示中的對(duì)話內(nèi)容

附上目前成品的展示與檔案架構(gòu)

以上,今天就差不多做這些了
另外有人有推薦的 GIF 截圖工具嗎?

相關(guān)創(chuàng)作

更多創(chuàng)作