框架梳理
目前分為五塊:菜單場景、游戲場景、CG場景、存讀取存檔場景、場景銜接。
未來添加的一些功能:游戲設置界面、游戲過程中的讀檔等UI、程序和劇情分離,供編劇測試的插件、對話回顧等。
個人學習作品,僅供參考,兩周匆忙趕出,代碼水平不高,還望見笑。
菜單場景:
主要功能:作為菜單,為不同按鈕綁定切換場景的事件。
主要函數:
Awake():為各個button綁定事件
OpenGame():切換場景到游戲場景
OpenCG():切換場景到查看cg
OpenFiles():切換場景到讀取存檔
ExitGame():退出游戲
CG場景:
主要功能:提供可以查看cg圖像或是人物簡介等游戲內容的場景,目前只能查看cg圖像
主要函數:
存在GlobalSetting.CGShows[]變量存放在GlobalSetting.cs中,作為是否解鎖cg圖的參考。
Start(): 通過讀取GlobalSetting.cs中的全局變量來判定是否給圖像解鎖。
Update():檢測是否打開了cg圖像,如果打開了cg的話點擊任意位置退出
BackToMenu():返回到主界面
ShowCG():打開panel,顯示cg
【暫留問題】:每次重新啟動游戲時,全局變量重置,需要在其他地方另外保存數據
游戲場景:
游戲場景初始化.cs
在Awake()中讀取存檔,若不為空則提前初始化gamescene
游戲場景.cs
主要功能:提供游戲界面的顯示,根據劇本推進劇情。提供存檔讀檔。有一個漸入漸出狀態機。
主要函數:
Start():初始化,調用Init()函數
Update():檢測到點擊則開始下一條劇情,同時提供圖片的淡入淡出功能
Init():一些參數的定義(淡入淡出的狀態等),綁定按鈕事件
ShowFileSave():調用之后出現存檔的panel
SetBackground(string bgName):傳入名字從resources中調出背景圖片並顯示
DelBackground():漸出背景圖片
SetCharaImage(string charaName, string pos):傳入名字和位置從resources中調出人物圖片並在左或右側顯示
DelCharaImage(string pos):漸出人物圖片
FadeInImg(Image img):漸入圖片需要調用的函數,修改漸入漸出狀態機
FadeOutImg(Image img):漸出圖片需要調用的函數,修改漸入漸出狀態機
UpdateColorAlpha():在漸入漸出狀態機執行的時候進行圖片的alpha檢測和切換,alpha>1或<0時切換狀態
UpdateColorAlphaRightNow():在圖片漸入漸出的時候如果鼠標點擊,則立刻修改狀態並完全漸入/漸出圖片(即圖片的透明度立刻變為0或1)
SetDialogText(string name,string content):對話框的姓名和內容
SetTalkingChara(string pos):調整正在說話的人物的圖片透明度,突出對話的主體人物
SetMusic(string bgmName):傳入名字從resources中調出音樂並播放
BackToMenu():返回主菜單
SetCharaImageFromFile(string charaName, string pos):從存檔中進入時,傳入名字和位置從resources中調出人物圖片並在左或右側顯示
SetBackgroundFromFile(string bgName):從存檔中進入時,傳入名字從resources中調出背景圖片並顯示
【存在問題】:這里十分臃腫,只有寫出這個的人(我)才能理解大概。
劇本讀取與解析.cs
主要功能:讀取劇本存入對應的數據結構中並解析,反饋給游戲界面。有一個劇情狀態機
主要函數:
Start():讀取劇本文件並存入到自定義數據類型ItemManager中
Update():劇情狀態檢測
Clicked():鼠標點擊事件,可以切換狀態
StartAVG():初始化狀態機
GoToState(STAGE next):提供狀態,切換到該狀態
PraseNextLine():分析下一行劇情命令,並傳入對應的函數
DealWithCommand(Line tmpLine):按照Command劇情命令執行
CheckTypingFinished():檢查對話時是否說完
DealWithText(Line tmpLine):按照Text劇情命令執行
UpdateContentString():按幀更新對話框內容,實現打字機的效果
UpdateAllString():在打字機打字的過程中若是再次點擊鼠標則一次性顯示未說完的所有內容。
存檔管理.cs
Start():綁定按鈕事件,創造文件路徑
ClosePanel():關閉存檔panel
PackingData(SaveData sd1):打包存檔數據
WriteData(StreamWriter temp):寫入存檔
ClickSave():點擊存檔按鈕即可存檔。
存讀取存檔場景:
存檔場景管理.cs
主要功能:再打開存檔場景時加載存檔,並提供入口進入游戲。
主要函數:Start()、BackToMenu()、LoadData()
Start():讀取存檔文件並綁定按鈕事件
BackToMenu():返回主菜單
LoadData():加載存檔並進入游戲
讀檔.cs
Awake():單例模式
WriteSceneData(List<string[]> data):將存檔寫入列隊,方便加載游戲場景的時候讀取
ReadSceneData():在gameseceninit中讀取存檔列隊
ToGameScene(string[] SaveFile):跳轉到游戲場景
存檔.cs
自定義數據結構,存放着存檔和讀檔需要的數據,包括劇情腳本行數、對話、背景、音樂等。
場景銜接
例如背景音樂在主菜單和存檔場景切換時不會停掉、畫面的漸入漸出。
背景音樂的控制:
-
建立一個循環音樂的預制體,這個預制體上掛載一個DontDestroyOnLoad的腳本。
-
在需要播放背景音樂的幾個場景掛載另一個GlobalUIMusic.cs,這個腳本為單例模式,如果存在則不產生新的,如果不存在則實例化預制體。