iT邦幫忙

2021 iThome 鐵人賽

DAY 21
0
自我挑戰組

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

21.unity簡易對話介面設計概念

對話系統(dialogueSystem)

計畫

小紅帽想跟奶奶說話,然後把蘋果送給奶奶。2D遊戲經常利用對話推進劇情,進行玩家互動,是角色扮演遊戲的精隨。這幾天要來練習製作簡單的對話系統,說話頭像+名字+內容,並且可以按下一步閱讀下一段落文字。

設計模式

利用MVC(Model–view–controller)模式設計,將管理數據、圖像顯示與控制流程分開,使後續對程式的修改簡化,也易於擴充對話內容。

Model(管理資源)–view(負責顯示)–controller(功能邏輯)

Model管理資源,角色、對話內容、圖片等等元件。

View負責顯示,接收處理過的數據,傳送至UI顯示。

Controller功能邏輯,負責處理數據,像是處理文本、文字斷句劃分。

用這樣的分工架構來完成對話系統,好處是分工明確,維護容易,較不混亂。


Model(負責管理角色數據、對話文本)

1.角色資訊:角色.name、表情、頭像陣列.img[]、頭像位置sprite.pos(頭像分左右邊)
2.對話文本:使用時機(條件)、內容.txt,文檔格式注意要UTF-8。

//舉例
對話一(條件:第一次見到奶奶).txt

小紅帽:奶奶好。
奶奶:好啊好啊。
小紅帽:奶奶我前陣子去了日本,買了很高級的蘋果。
奶奶:乖孫乖孫。

對話二(條件:小紅帽身上蘋果不足).txt
小紅帽:阿奶奶,我忘記帶蘋果了。
奶奶:......好吧,奶奶不餓。

View(負責顯示資料給玩家)

玩家接近奶奶,按下對話建啟動對話,用canvas(GUI)展示對話內容。

1.接收對話數據,得知對話者與對話內容
2.抓取對話者相關資訊(頭像、表情)
3.用canvas顯示
4.接收「下一步」指令觸發事件

圖片失效

Controller(負責文件處理、文字分段、功能實現、傳遞變數)

1.偵測事件,觸發事件後,用條件決定要讀取哪一段文本
2.讀取.txt檔,獲得字串或字元陣列
3.分析文件,處理字串或字元陣列,透過關鍵字或特殊符號進行分段,得到對話者與對話內容
4.傳送處理後的文件資訊(已分段的對話和名字)到GUI

其他延伸

擴充功能,如果有空再來思考~

  • 玩家輸入自己的名字,自動代入至對話系統
  • 自動讀取、抓取文件、自動更新
  • 系統完整封裝

結語

目前unity已經發展得很成熟,github或社群之中已經有很多寫好的資源可以使用,現成的對話系統很多,現成對於製作遊戲來說很方便,推薦去尋找好用的對話系統,節省時間也是控制開發成本的一環唷!


上一篇
20.unity換場景
下一篇
22.unity讀取文字文件並分行(TextAsset、Split)
系列文
用unity製作2DRPG雛形-沒有大野狼的小紅帽30

尚未有邦友留言

立即登入留言