這腳本用來控制整個對話UI,包括UI的淡出淡入、文字和圖像切換等
在啟動對話UI後,會先讀取名字,然後判斷他是出現在上/下對話框
先假設現在使用上對話框。如果對話框沒有顯示,則讓對話框淡入(設定上,還沒有對話出現的對話框,在起始不會出現)
淡入後,會把名字和頭像進行切換。而「對話內容」由另一個void管理(下一張圖)
當上下對話框都已出現時,「沒在說話的角色對話框」會變為暗灰色
最後,在該段對話結束後,會判斷有沒有劇情或UI
更改對話內容的void裡,同樣會先判斷這是上/下對話框,之後才更改對話內容
另一個比較特別的是:Replace \\n , \n
先說一下,\n是用來自動換行的。但輸入這個語法後,Unity好像會自動把 \n 變成 \\n
所以這時需要手動把它調回來"XD(把 \\n 變回 \n)
不過說實在,以我自己的實力不可能知道這種東西的ww
那時在查資料時剛好看到別人的教學,就拿來用一下
可惜的是現在找不回那教學,沒辦法附上連結_(:3」
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHn1X3jbU1r7IdofZ1kd0vzzzDAdN7eTSK9XnIOPm9RJYTMR116G0oQ7x3YAw7vKdZtFPkBYnz6A78vJgXkghOY35D47vIJ-Xz39Ki4zx1vCXmYiG4u_QuA5kFQTxPCJ4nmLzQsIgR3z5Z/s640/TalkUI_3.jpg)
因為現在的設定是按下相關按鍵(比如Z)後,對話就會跑下去
假如沒設限制,那在「對話一」時按下Z,「對話二」也會跟著跑。到時所有對話都會亂掉
現時遊戲中的防禦機制,會和遊戲物件的Component有關,所以先解說一下:
.控制對話UI用的腳本是掛在UI上的
.每段對話分開成不同GameObject,裡面掛著對話資料(上一篇文的腳本)和觸發對話腳本(等下會講到)
那麼,我是讓所有對話在一開始時都 inactive的。當觸發對話後,對應的物件才變成active
至於怎樣才做到這點,那就是宣告一個陣列來抓取子物件(GetChild)
每當要觸發對話時,腳本都會傳送自身子物件的位置,讓子物件啟動
宣告子物件位置的程式碼,則會在下幾張圖中說到
在那之前先繼續UI操控的部分:
當全部對話結束後,會呼叫ResetImage,把相關參數都重置(為免下次啟動UI時,會有殘留的資料出現)
然後對話框便淡出
UI控制大致上是這樣,然後今天就一氣呵成的「觸發對話」也說完
當玩家碰到觸發器後,會自動開啟對話UI
上圖的最後一句,就是用來傳送子物件位置的程式碼(用Debug.Log測試過,它會回傳一個數字(int))
除此之外,在觸發器腳本上,有設置一個下拉選單,選擇是哪一種觸發方式
現時分別設置成:
.對話完後就不會再重新對話
.同樣對話完就不會再觸發,但若對話裡內含劇情動畫的話,就要選擇這方式
.對話後離開範圍,再次踏進觸發範圍時會被重新觸發
目前主要用到的就這三種模式……其實還有寫一個「按下按鍵後才觸發對話」的模式,但因為美術部分未準備好,於是先把它拿掉_(:3」
最後啦,當在離開觸發範圍後,會回傳一個「-1」給UI的防禦機制
這個「-1」在void裡已設定好,代表讓GameObject inactive
與此同時,對話中的參數也重置,以免出Bug
……第一次寫這麼長w
認真來說,這個系統的複雜度應該可以分3、4篇
但那樣的話感覺會變成教學文——我還沒有實力這那種東西
腳本內一堆誤人子弟的程式,被看見就不好了XD
所以我一直以來都只是講講基本架構。一來用於整理自己思緒,二來……也或多或小希望這些邏輯概念刺激到別人啦 ((自肥ww
總之,感謝看到這裡
如無意外,程式架構的東西還有三篇就完了
還在想之後要不要寫美術心得_(:3」
沒有留言:
張貼留言