前往
大廳
主題

Unity 遊戲製作 - 對話系統開發日誌 Day2

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


前言

趁著這今天假日沒什麼事情要做,把進度推了一下
開始主文前先來看一下上次列出來要做的功能有哪些吧
  1. 對話內容顯示
  2. 加速對話文字顯示
  3. 略過對話
  4. 人物立繪的顯示
  5. 人物名稱的顯示
  6. 對話文本是採用外部檔案存取
  7. 選擇系統


主文

如果以上面列出的功能的話,其實今天進度推蠻多的
1. 2. 5. 6. 項的功能都完成的差不多了,然後第 4 項的內容也有先建立好對應的方法了,只是因為還沒有找到適合的圖片進行測試,所以就先不列入完成清單了

今天主要內容是將程式碼內容完善,讓之前建立好的框架能有實際執行的內容。
首先是 DialogueSystem.cs 這是整個對話系統的對外窗口
也就是如果我們現在有一個 NPC 要說話,他就要呼叫這隻程式的方法,並傳入他要說的文本檔名,來啟動整個對話系統。
因為我們可以讀取外部文本檔案來顯示對話內容,所以傳入的資料需要是文本的檔名即可。

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

對話系統的核心放在 DialogueCanvas.cs 這隻程式內,主要負責控制頁面元件的顯示內容什麼的,都是放在裡面,不過感覺程式有點冗長,目前有在考慮要不要再做額外的拆分……
總而言之,整個對話系統初始化的時候,DialogueCanvas.cs 也會進行初始化,將頁面需要的出現的元件也都建立完畢,以利後續的內容顯示。
這隻程式是有繼承 MonoBehaviour 的,主要是要掛載在 DialogueCanvas 這個場景物件上,之所以要掛載在物件上,是因為我要使用 Update() 這些方法去顯示文字內容。
可能要先另外提一下,DialogueFSM.cs 這隻程式,我有先寫一個關於對話系統的狀態機,目前有暫定幾個狀態: 待命、準備說話、對話中、對話結束等待切換
接著透過這幾個狀態在 DialogueCanvas 的 Update() 中去判斷並調整顯示中的對話內容

附上目前成品的展示與檔案架構

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

創作回應

謙謙
推 我也想要GIF截圖工具
2023-09-03 10:16:44
Tyrr. R
以前有用過 bandisoft 的 honeycam,覺得還可以
https://en.bandisoft.com/honeycam/
2023-09-03 14:48:50
bogay
我平常都是用開源的 ShareX,可透過 steam 安裝
https://getsharex.com/
2023-09-03 18:29:23
KO
gif 我是用 screenToGif 很方便
2023-09-07 17:37:11
放課後的遊戲
感謝幾位巴友的軟體推薦 [e19]
2023-09-18 00:45:36

更多創作