好吧好吧,又談到這個問題了,其實早就想寫這個博客了,猶豫了好久。在設計游戲的時候我本人是很排斥什麼游戲架構設計,mvc什麼的,我只想馬上動手就把自己的游戲玩法最快的用代碼敲出來,還不會出無法輓回的錯誤,那麼下麵的步驟可以幫助你構建一個簡單的游戲模式架構。 一。首先是數據存儲類,如GameManage ...
好吧好吧,又談到這個問題了,其實早就想寫這個博客了,猶豫了好久。在設計游戲的時候我本人是很排斥什麼游戲架構設計,mvc什麼的,我只想馬上動手就把自己的游戲玩法最快的用代碼敲出來,還不會出無法輓回的錯誤,那麼下麵的步驟可以幫助你構建一個簡單的游戲模式架構。
一。首先是數據存儲類,如GameManager,UIManager,SoundManager等這些類,這些類是不銷毀的,由於這些類為物體組件,用普通的單例模式容易出現實例化的衝突,因此可以首先載入一個數據場景,間隔一段時間後載入第二個正式場景,以後最多的返回也只能返回到第二場景,這樣就解決了衝突問題
二。分場景控制類,每個場景中有可能要進行不同的複雜的控制,比如播放個動畫,選擇角色什麼的。比如UI場景,該場景中主要以UI功能為主,設置音量,選擇角色什麼的,都在該場景中進行,因此可以用個UIScene類的做一些特殊的控制;正式游戲場景,比如在UI場景選擇好了敵人,那麼現在進入正式打擊敵人,冒險什麼的,可以建立一個PlayScene場景,該場景用來控制播放個動畫次序什麼的各種操作。
三。通用類的作用,比如UI控制中物體的隱藏與出現,跳轉到另一個場景的操作,銷毀物體的操作這些可以用一個GeneralController的集成這些函數,然後作為組件的形式添加到需要的分場景的場景控制的物體上,這一點尤其對UGUI的添加事件很有效。
四。觀察者類與數據存儲類的靜態變數。比如游戲載入後要把當前的語言或者音量設置到相關物體上,那麼尋找攜帶這些數據的Manange類的方式有自帶的Find相關類,或者使用數據存儲類的instance靜態變數,判斷該靜態變數是否為真,如果為真,那麼就說明該類的物體存在,直接調用該靜態變數獲取到相關需要的數據。
五。為多個物體設置數據。這裡涉及到在場景中尋找具有相同標簽或者擁有相同組件的物體,這裡最好的方式是為每個相同組件的物體添加一個觀察者組件,該組件用於當物體生成時,調用相關的管理類,將自己存放到管理類的存儲列表中,這樣管理類就不用在場景中去尋找這些物體了。
六。對象池。這裡並非這篇博客主要內容,只是做個提醒,因為拋開性能問題,上面的的五條對一般游戲來說足夠了。對一些長期生成的物體如子彈等最好做成一個對象池,從而提高機器性能。