最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Unite 2017-Scriptable Object (一)

2022-11-06 00:56 作者:防輻射君  | 我要投稿

游戲的核心

模塊化(Modular)、可編輯(Editable)、可被測試化(Debuggable)

  • 模塊化自不用多說,減少耦合性的根本。

  • 可編輯則要求,一個項目中的所有開發(fā)者,甚至所有成員都應該可以對項目內容進行編輯or更改。

一、模塊化

系統(tǒng)之間不要直連在一起

模塊化要求我們不能讓我們的系統(tǒng)之間直接聯(lián)系在一起,比如如果你有一個庫存管理系統(tǒng)需要和游戲中的其他系統(tǒng)通信,但是我們又不想讓他們之間產(chǎn)生一個強連接,因為這會讓我們的系統(tǒng)非常不靈活,同時重新集成的時候會非常難受。

干凈的游戲場景

游戲場景中也應該盡可能干凈,場景直接不會傳輸任何數(shù)據(jù), 這樣每次加載或卸載場景的時候開銷將非常小,這樣就可以使每個場景都只做單一職責,防止你在場景之間打洞傳輸。

預制體要獨立工作

每個預制體的功能要抽象到一定程度,這樣可以盡最大化減少沖突

組件化

unity引擎的最大優(yōu)勢,就是可以將每一件事劃分到一個具體的組件程度,做且僅作一件事。

二、可編輯化

基于數(shù)據(jù)的開發(fā)

盡可能讓我們的項目以數(shù)據(jù)驅動,這可以讓我們的游戲隨時進行更改,甚至在運行時。

不要每次都用代碼改變程序、高集成度的設計

可以用做很多小組件的模式來制作游戲,這樣不但可以快速開發(fā),同時可以大幅度減少測試的成本

運行時更新游戲

更好隨時隨地的調試你的游戲

三、可調試化

最好又相應的視圖來做調試工作。

永遠不會修復你沒有遇到的錯誤

對于bug來說:

好家伙

Scriptable Objects 基礎

  • 可視化版Unity類

  • 類似于Mono behaviour,但是沒有transform、GameObject這種原生組件(最終繼承自Object)

  • 以asset的方式存儲

Scriptable Objects用例

  • 游戲配置文件(雖然視頻里說了很多大型項目都在用這個來配置,但是不知道為什么國內都不用這個,從原生大小看確實比配置文件大)

  • 背包系統(tǒng)的數(shù)據(jù)封裝

  • 敵人狀態(tài)?(還沒實際用過,倒是做過狀態(tài)機)

  • 音頻管理(一個asset中存一堆,然后獲取,類似工廠)

架構

別再濫用單例了?。。?!

P.S :終于有看到有人講單例壞的地方了,下次用這個跟人battle。

從小到指甲邊緣起皮,大到核戰(zhàn)爭,一切都是由于單例引起的?。?/p>

單例模式的優(yōu)點

  • 任何地方,拿到任何東西

  • 持久化存在

  • 很簡單的能理解

  • 很“簡單”來構建項目(前人挖坑,后人遭殃)

缺點

  • 剛性連接,每個系統(tǒng)沒法獨立存在

  • 缺少多態(tài)性

  • 測試起來非常困難

  • 依賴噩夢,我們不想要一些東西的時候,它依然會存在

解決方案

  • 減少全局的引用

  • 控制反轉

模塊化數(shù)據(jù)

主要用于減少全局查詢數(shù)據(jù)的操作行為

我們以一個敵人的實體舉例

  • xxxManager.Instance.MoveSpeed

以這種方式獲得變量的話會造成硬連接,同時非常依賴對應的manager被加載進來。

  • 使用SO直接進行配置

這樣會把一個敵人的所有信息配置到一個文件中,造成一個巨大的冗余,同時擴展性與模塊性會變得很差。

解決上述問題的方案,就是:

Scriptable Object 變體

PS:使用 [CreateAssetMenu] 以相同的SO腳本創(chuàng)建出的不同Asset。


這樣就可以用這些變體來做對象的數(shù)據(jù)管理

但是這種每個變量都創(chuàng)建一次的方式非常麻煩,所以我們在上層又進行一次封裝

所以我們最終把DumbEnemy類做一些修改

PlayerHP就是一個中間人

再用一個實例來解釋這個,就是上圖

一個中間件通知player預制體受傷了,同時,對UI界面通知更新狀態(tài),而不用讓玩家對象直接引用UI界面做更改。音頻界面同理。

這樣就可以讓這些數(shù)據(jù)以某種持久化的形式,加載在內存中,使得你在運行時也可以調試!


Unite 2017-Scriptable Object (一)的評論 (共 條)

分享到微博請遵守國家法律
维西| 区。| 磴口县| 汝城县| 米易县| 双桥区| 宁乡县| 凤阳县| 辽阳市| 苗栗市| 修文县| 南靖县| 石家庄市| 古浪县| 陆河县| 上犹县| 四子王旗| 河北省| 大足县| 安远县| 衡水市| 盐亭县| 望奎县| 八宿县| 七台河市| 全南县| 玉山县| 阿拉尔市| 景德镇市| 金乡县| 皋兰县| 江山市| 纳雍县| 昔阳县| 合水县| 安宁市| 中西区| 文昌市| 左权县| 会理县| 正阳县|