天天看點

unity3d 人物對話_【Unity3d】從0開始的Galgame開發架構(3)--劇情對話系統

unity3d 人物對話_【Unity3d】從0開始的Galgame開發架構(3)--劇情對話系統

Nekopara

在遊戲中,我們總是會見到上圖這種劇情對話功能,它在很多尤其中,尤其是galgame中,起着重要的作用。

那麼,這樣的系統,要怎麼做呢?

我們可以大緻分為兩部分:對話劇情的編寫

運作編寫好的劇情内容

其實在我看來,做這麼一套系統,最大的難點,其實是在第一條:怎麼設計一套編寫劇情對話的東西。

在我這種典型的程式員的視角來看,直接拿Lua腳本寫劇情就非常棒,比如這樣:

local dialogue = {}

local Mgr = XCore.Drama.DialogueManager;

dialogue[1] = Mgr.Say("史萊姆","我也是個廣東人,是以我們是老鄉");

dialogue[2] = Mgr.Say("哥布林","花~Q");

dialogue[3] = Mgr.Say("史萊姆","oh, 花可U,Leather Man~");

return dialogue;

這樣對于程式員來說,顯然是最爽的,你甚至不用刻意去解析它,拿到資料之後直接就可以運作了。但是問題是,一般在做遊戲的時候,都不是程式員去編寫劇情腳本的,而是文案啊、策劃啊之類的。你讓非程式工作者去直接寫Lua,先不說會不會出錯,他們肯定會先想着怎麼把程式員打一頓的。

是以,這樣是行不通的,那有沒有其他方案呢。

诶,好像我工作的公司的項目中就有對話系統,我去看看他們是怎麼弄的。然後,我們看到他們把所有對話文本,都配在了Excel中。

unity3d 人物對話_【Unity3d】從0開始的Galgame開發架構(3)--劇情對話系統

emmm,乍一看好像沒問題,但是遇到選擇項的時候,這麼操作就非常繁瑣了。

比如:

史萊姆:“我也是個廣東人,是以我們是老鄉”。

請選擇操作:“ 花~Q! ”

“雷猴啊”

不理她

那麼,在這樣一個選項中,每個選項之後,會有不同的對話内容,甚至還有不同的選項對角色的某些屬性的影響。(比如選擇“ 花~Q! ”會讓史萊姆對自己的好感度+10 這類的功能)

這樣的話,Excel配表格這種操作,就顯得有很大局限性了。(那為什麼我司的項目用Excel呢,我問了下,他們說遊戲裡不可能有太過複雜的劇情對話,但是對于做Galgame之類的情況,就完全不夠用了)。

于是,接下來,我們來看看網絡上有什麼不錯的解決方案,然後,我找到了這個:Ink語言。

ink是由inkle公司推出的一種腳本式的文字預處理語言用來編寫一些對話類遊戲的對話内容及流程圖。 寫起來大概是這樣:

史萊姆:我也是個廣東人,是以我們是老鄉。

請選擇操作:

* “花~Q!” [] oh, 花可U,Leather Man~

* “兩開花!兩開花!”

于是呢,我就把這玩意給拿給我們文案看了,文案表示,這個好像還是有挺高的學習成本诶,而且看着也不是很直覺。有點亂亂的。

(其實就是不想學嘛喂!ヽ(●-`Д´-)ノ)

然後,我就自己撸了一套,長這樣

unity3d 人物對話_【Unity3d】從0開始的Galgame開發架構(3)--劇情對話系統

嗯,利用圖表節點來描述對話流程。

unity3d 人物對話_【Unity3d】從0開始的Galgame開發架構(3)--劇情對話系統

在節點圖表中,你可以直接通過連線的方向,複用之前的節點

運作如下:

unity3d 人物對話_【Unity3d】從0開始的Galgame開發架構(3)--劇情對話系統
unity3d 人物對話_【Unity3d】從0開始的Galgame開發架構(3)--劇情對話系統

分支選項

unity3d 人物對話_【Unity3d】從0開始的Galgame開發架構(3)--劇情對話系統

兩開花選項

unity3d 人物對話_【Unity3d】從0開始的Galgame開發架構(3)--劇情對話系統

再次回到分支選項時,設定為“隻能選擇一次”的兩開花選項消失

此外,配合一些參數綁定的功能,和事件廣播的功能,一個簡單的對話系統就做好了。

開源引用

CatLib:CatLib - 文檔​catlib.ioxNode:xNode - Asset Store​assetstore.unity.com

unity3d 人物對話_【Unity3d】從0開始的Galgame開發架構(3)--劇情對話系統

文章位址:【Unity】自己動手做一個劇情對話系統吧-有木醬的小屋​www.yomunchan.moe

unity3d 人物對話_【Unity3d】從0開始的Galgame開發架構(3)--劇情對話系統