Unity 3D | 游戲UI中使用觀察者模式

前言

原文鏈接: https://www.yuque.com/finctive/game-dev/obsever-ugui

本文參考自:

在閱讀完本文后,請查看上述鏈接內容。

本文使用的示例工程:FINCTIVE/lost-in-the-wilderness-nightmare(荒野迷蹤:噩夢)歡迎Star赂摆!

由于水平有限,文章內容可能有誤抠藕,歡迎探討、交流蒋困、或直接批評盾似。
┗|`O′|┛

本文作者: FINCTIVE
聯(lián)系郵箱: finctive@qq.com

轉載請標明原文鏈接以及作者名字,謝謝雪标。

應用場景

想象你在游戲項目中實現(xiàn)了一個角色控制器零院,這個控制器相對復雜,以至于你想新開一個空場景來單獨測試這個控制器腳本村刨。

很不幸告抄,你發(fā)現(xiàn)在新場景中,角色游戲對象缺乏相關UI的引用嵌牺,導致程序無法測試打洼。

public Slider hpSlider; // 舉個例子,角色HP的血條
void GetDamage()
{
    // ...處理受傷代碼...
    // 更新相應UI
    hpSlider.value = newValue; // 在新場景中導致空引用
}

解決方案

使用C#委托和事件來建立hp更新和UI更新的聯(lián)系逆粹。

在管理玩家屬性的腳本中(本例中是PlayerInfo.cs)

public event Action<int> OnPlayerHpChange;
public int hp
{
    get => _hp;
    set
    {
        _hp = value;
        if (OnPlayerHpChange != null)
            OnPlayerHpChange(_hp);
    }
}

在控制UI更新行為的腳本中(本例是PlayerHpUI.cs)

void Start()
{
    // 通過全局變量獲取player示例中的playerInfo對象(與上一個代碼示例對應)
    PlayerController.player.playerInfo.OnPlayerHpChange += _OnPlayerHpChange; 
}

private void _OnPlayerHpChange(int hp)
{
    hpSlider.value = (float)hp / 100f;
}

在本例中Player控制器部分代碼與UI更新代碼分離開了募疮,實際工程項目中會出現(xiàn)更復雜的情況;本文例子是“一對一”的情況僻弹,實際工程中有可能會出現(xiàn)“一對多”甚至“多對多”的情況阿浓。

更經典的應用場景是游戲成就系統(tǒng):游戲成就千奇百怪,把判定游戲成就的代碼耦合到其他游戲系統(tǒng)中不是一個明智的做法蹋绽。

作者:FINCTIVE(finctive@qq.com)
歡迎轉載芭毙,請附上原文鏈接以及作者名字,謝謝卸耘!

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末退敦,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蚣抗,更是在濱河造成了極大的恐慌苛聘,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忠聚,死亡現(xiàn)場離奇詭異设哗,居然都是意外死亡,警方通過查閱死者的電腦和手機两蟀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門网梢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赂毯,你說我怎么就攤上這事战虏。” “怎么了党涕?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵烦感,是天一觀的道長。 經常有香客問我膛堤,道長手趣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任肥荔,我火速辦了婚禮绿渣,結果婚禮上,老公的妹妹穿的比我還像新娘燕耿。我一直安慰自己中符,他們只是感情好,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布誉帅。 她就那樣靜靜地躺著淀散,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蚜锨。 梳的紋絲不亂的頭發(fā)上档插,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天,我揣著相機與錄音踏志,去河邊找鬼阀捅。 笑死,一個胖子當著我的面吹牛针余,可吹牛的內容都是我干的饲鄙。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼圆雁,長吁一口氣:“原來是場噩夢啊……” “哼忍级!你這毒婦竟也來了?” 一聲冷哼從身側響起伪朽,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤轴咱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體朴肺,經...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡窖剑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了戈稿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片西土。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鞍盗,靈堂內的尸體忽然破棺而出需了,到底是詐尸還是另有隱情,我是刑警寧澤般甲,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布肋乍,位于F島的核電站,受9級特大地震影響敷存,放射性物質發(fā)生泄漏墓造。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一历帚、第九天 我趴在偏房一處隱蔽的房頂上張望滔岳。 院中可真熱鬧,春花似錦挽牢、人聲如沸谱煤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刘离。三九已至,卻和暖如春睹栖,著一層夾襖步出監(jiān)牢的瞬間硫惕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工野来, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留恼除,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓曼氛,卻偏偏與公主長得像豁辉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子舀患,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內容

  • (之一) 兒子小時候徽级,陪我開會,書記鎮(zhèn)長坐主席臺聊浅,其他人盡量往后坐餐抢。他指著主席臺問:媽现使,他們啷么要坐高頭?我:他們...
    王有財有財閱讀 338評論 2 2
  • cowshed a building where cows are kept 牛棚旷痕,牛舍 photovoltaic...
    烏琪琪閱讀 483評論 0 0
  • 機器學習&監(jiān)督學習&非監(jiān)督學習概念 機器學習 Tom Mitchell provides a more moder...
    共田君閱讀 1,749評論 0 3