甚麼是 UnityEvent

更新於 2023/06/02閱讀時間約 3 分鐘

前情提要

這篇主要介紹的是 Unity 內建的 UnityEvent,原本是打算面向比較初階的教學,後來發現有些程式碼還是太不入門了(Lambda語句、泛型等),所以如果在閱讀時遇到看不懂的部分先在這邊說聲抱歉。

藏在 Unity 裡面

如果你今天正在製作 UI 遷移,你應該對下面這個東西不陌生:
Button Component
我們會把按鈕要做的功能塞到 OnClick 上面,像是頁面跳轉、彈出視窗等,但你有沒有想過這個 OnClick 到底是甚麼黑魔法?
Button metadata
查看 Button 可以發現 onClick 是一個 ButtonClickEvent ,它繼承了今天要講的主角 UnityEvent 。
要宣告 UnityEvent ,不要忘記將命名空間加入。
using UnityEngine.Events;

角色控制器

這裡有一個大家的好朋友,一個最基本的角色移動程式碼:
  • 定義了 speed ,移動速度
  • 在 Update() 內逐幀判斷鍵盤輸入
  • 鍵盤輸入方向鍵時讓 transform 朝輸入方向進行位移
  • 鍵盤輸入空白鍵讓 Player 執行 Attack()
這個程式碼有很多問題,像是按鍵是寫死的、沒有加速度等,除此之外,隨著遊戲開發, Update() 方法裡肯定不只是這短短的程式碼,像這樣的程式碼要怎麼用 UnityEvent 來魔改呢?

很笨的成績單

在我當兵新訓的時候,有個規定是打靶 6 發要中 4 發,滿靶的有手機玩,而沒達標的準備罰站。
於是,每次打完靶,你不只要大老遠從靶場走回來,當班長把成績掛上公告欄,你還得跟同袍們擠來擠去,看今晚究竟是吉是凶。大家同時擠在公告欄前面,人一多就吵吵鬧鬧,班長不開心了,把大家臭罵了一頓。
用 C# 寫起來就像這樣:
上述這個情況,有兩個問題點:
  • 每個人只需要知道 自己的 成績
  • 其實成績只跟 滿靶少於4發 的人有關係
這時候如果有個人負責看完之後, 廣播 滿靶跟未達標的阿兵哥就行了。
所以我們有了會主動通知的成績單:
有甚麼不一樣?
  • gradeEvent 可以讓所有阿兵哥透過 Subscribe() 訂閱
  • Publish() 裡面先判斷哪些成績符合需求,透過 Invoke() 廣播
  • 另外你會注意到 gradeEvent UnityEvent 使用了泛型,這讓我們可以定義這個事件廣播時傳出的參數類型
  • 在這個範例中傳出的類型是 號碼(int)狀態(Soldier.Status)

魔改控制器

我們不妨換個方向思考,把控制器給獨立出來!
然後就能讓 Player 來訂閱這個控制器的事件
有甚麼不一樣:
  • 控制器被分離了,這意味著我們可以隨時抽換控制器,也可以讓其他物件擁有、甚至操控這個控制器
  • Player 的 Update() 可以更專注於其他行為
但假設角色死了,總不能讓玩家繼續操控吧!所以有了下面的程式碼:
讓角色死亡時使用 RemoveListener() 來解除訂閱。

小結

這次大概用了兩個例子展示 UnityEvent 的使用方式:
  • AddListener 訂閱
  • Invoke 廣播
  • 不需要時 RemoveListener 解除訂閱
上面的角色控制器也還有很多值得修正的地方,就先匆匆帶過了,如果對事件有興趣,可以往 C# 原生的事件系統研究,雖然使用上沒有 UnityEvent 那麼簡單,但效能跟擴充性都強了點。
avatar-img
6會員
10內容數
只要10分鐘!
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
隨著健身意識興起,各類體態矯正與肌力強化運動設計越來越親民。運動不只是少數愛好者的專利,其中,適合大眾的嬋柔運動正逐漸受歡迎。 創始者Juliu Horvath原是活躍於舞台的芭蕾舞者,但長年受運動傷害所苦,在跟腱受傷被迫終止舞蹈生涯後,開啟長達數年的自療之旅。嬋柔運動的誕生,來自Juliu對
Thumbnail
上週國二的小犬突然問我,甚麼是第一桶金?我很好奇回問他,怎麼會想要問這個問題?他說同學跟老師都會討論,看來這個世代投資理財的焦慮感越來越嚴重。最後我想了一想,是這樣回答他的...
Thumbnail
中國宋朝太宗時代 陳希夷先生於華山修行禪定之時,嘗觀天象。以紫微垣為北極中天三垣之星,以北極五星為主及所環繞其周圍之星斗,吉凶星辰共計一0八顆,歸劃為南北斗中天體系。 以易理易數、陰陽五行作基礎,綜合果老星宗數、祿命、堪輿、曆書等諸家學說之精華,不依五星要過節之論說,而整理出曠世的命理學術
Thumbnail
後備自訓是民間自主學習訓練後備軍人必要的方式,文章提及了後備自訓的定義與動機,並強調後備自訓不是民兵,亦非即興訓練。此外,也針對後備自訓者與生存遊戲玩家間的差異,以及後備自訓與民防的相同處和不同處進行了討論。建議術語: 後備自訓, 後備軍人, 國軍, 民防, 民防法
Thumbnail
公司在日常營運期間,如開立公司銀行賬戶、辦理銀行貸款、購買物業等等的情況下,時常都會被第三方機構要求提供公司文件或身份證明文件的經核證副本(Certified True Copy)。創業新手可能會問點解公司需要提供? 事實上,經核証副本是一份經過合資格人士核證的文件副本,第三方機構為了確認相關
Thumbnail
高中寝室住校,室友买了个onaho飞机杯,夏天炎热的宿舍,一群未成熟的小男生一起把玩。 谁知道突然查寝大妈来了,而这个爱丽丝正好在我手里,我着急忙慌的塞到枕头底下,查寝大妈看见了,就说你藏什么呢?周围的同学一顿坏笑,当时学校是禁止带手机的,大妈以为我藏的是手机,非要我拿出来,我要看着藏不住了,就把飞
Thumbnail
问我擅长做什么,现在想想,真的没有很擅长的事。小时候,比起很多同辈分的学生,读书成绩还不错,不过也不是超级厉害,名列前茅。出社会后,厉害的人比比皆是,更加不觉得自己有多厉害了。真要绞尽脑子想的话,可能是以下几点吧!
“身”指的是八字中的日干。 “旺”意思是有力量,有能量; “弱”意思是力量小,能量少; 八字中有木火土金水五行,身旺指的是:八字中日干所代表的五行比其他五行相对有力量;身弱反之。这个定义还不够严谨,更准确的说是日元的生助来源强有力。对新手来说差不多,有的东西只能意会不好言传。得多思考。 五行是个生态
这个世界任何事任何物都有个主要启动点,有的事物主要启动点明朗可见,如电器要靠电启动、走路要靠脚启动等,而有的事物主要启动点混沌摇摆难辨,如树木生长主要靠土启动还是水?又如人的认知主要靠什么启动呢? 问到这句,我知道肯定有人会说是大脑,其实学校里的学生人人都有个大脑,为什么有的学生成绩好,而有的学生成
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
隨著健身意識興起,各類體態矯正與肌力強化運動設計越來越親民。運動不只是少數愛好者的專利,其中,適合大眾的嬋柔運動正逐漸受歡迎。 創始者Juliu Horvath原是活躍於舞台的芭蕾舞者,但長年受運動傷害所苦,在跟腱受傷被迫終止舞蹈生涯後,開啟長達數年的自療之旅。嬋柔運動的誕生,來自Juliu對
Thumbnail
上週國二的小犬突然問我,甚麼是第一桶金?我很好奇回問他,怎麼會想要問這個問題?他說同學跟老師都會討論,看來這個世代投資理財的焦慮感越來越嚴重。最後我想了一想,是這樣回答他的...
Thumbnail
中國宋朝太宗時代 陳希夷先生於華山修行禪定之時,嘗觀天象。以紫微垣為北極中天三垣之星,以北極五星為主及所環繞其周圍之星斗,吉凶星辰共計一0八顆,歸劃為南北斗中天體系。 以易理易數、陰陽五行作基礎,綜合果老星宗數、祿命、堪輿、曆書等諸家學說之精華,不依五星要過節之論說,而整理出曠世的命理學術
Thumbnail
後備自訓是民間自主學習訓練後備軍人必要的方式,文章提及了後備自訓的定義與動機,並強調後備自訓不是民兵,亦非即興訓練。此外,也針對後備自訓者與生存遊戲玩家間的差異,以及後備自訓與民防的相同處和不同處進行了討論。建議術語: 後備自訓, 後備軍人, 國軍, 民防, 民防法
Thumbnail
公司在日常營運期間,如開立公司銀行賬戶、辦理銀行貸款、購買物業等等的情況下,時常都會被第三方機構要求提供公司文件或身份證明文件的經核證副本(Certified True Copy)。創業新手可能會問點解公司需要提供? 事實上,經核証副本是一份經過合資格人士核證的文件副本,第三方機構為了確認相關
Thumbnail
高中寝室住校,室友买了个onaho飞机杯,夏天炎热的宿舍,一群未成熟的小男生一起把玩。 谁知道突然查寝大妈来了,而这个爱丽丝正好在我手里,我着急忙慌的塞到枕头底下,查寝大妈看见了,就说你藏什么呢?周围的同学一顿坏笑,当时学校是禁止带手机的,大妈以为我藏的是手机,非要我拿出来,我要看着藏不住了,就把飞
Thumbnail
问我擅长做什么,现在想想,真的没有很擅长的事。小时候,比起很多同辈分的学生,读书成绩还不错,不过也不是超级厉害,名列前茅。出社会后,厉害的人比比皆是,更加不觉得自己有多厉害了。真要绞尽脑子想的话,可能是以下几点吧!
“身”指的是八字中的日干。 “旺”意思是有力量,有能量; “弱”意思是力量小,能量少; 八字中有木火土金水五行,身旺指的是:八字中日干所代表的五行比其他五行相对有力量;身弱反之。这个定义还不够严谨,更准确的说是日元的生助来源强有力。对新手来说差不多,有的东西只能意会不好言传。得多思考。 五行是个生态
这个世界任何事任何物都有个主要启动点,有的事物主要启动点明朗可见,如电器要靠电启动、走路要靠脚启动等,而有的事物主要启动点混沌摇摆难辨,如树木生长主要靠土启动还是水?又如人的认知主要靠什么启动呢? 问到这句,我知道肯定有人会说是大脑,其实学校里的学生人人都有个大脑,为什么有的学生成绩好,而有的学生成