切換
舊版
前往
大廳
主題

【Unity學習筆記】初嘗event system ,外加簡單打擊判定練習

%%鼠 拒收病婿 | 2020-01-01 02:53:36 | 巴幣 28 | 人氣 1794

看了大佬的event教學與筆記,讓我熊熊燃起興趣,想好好究研究一下

我不能講出甚麼大道理,而且可能會用錯一堆專業用詞之類的,還請見諒。

簡單說一下event system使用方式:
建議服用這影片:

首先,創個單例物件,所謂的單例物件大概就是整個場景裡面只會有一個特定的class存在,例如一個scene裡面只有一個gameManager類別。且單例物件通常都會定義一個自己的static instance讓其他物件可以輕鬆抓取。

再來,在單例物件裡規劃有哪些event 與 呼叫event的公開方法。

第三,實作方法並給event訂閱

以上說起來好像很簡單,但像我這種新手就很容易搞混在這種掛來掛去的奇妙關係中。
所以搭配上方的影片內容,我做了個整理: (字醜請見諒)

簡單說DoorTrigger是附加在一個有碰撞器的物件上,用來檢測玩家物件是否靠近了,是就呼叫開房的方法。玩家遠離就呼叫關門的方法。
而DoorController就是把這些關門、開門方法實作的主角!!

我寫"參數要一致"的意思是:
OnDoorOpen當初是宣告成 event Action<int>

所以DoorController實作方法的傳入參數就得跟他一樣。  ((除非是多載(?  我還沒試過事件多載
錯誤訊息如下:






看了以上基本知識,想出個小練習題目給大家

用上面學到的event的方法做個打擊判斷:
規則: 星星到圈圈裡時按下space就得分!  用滑鼠也可以,只是滑鼠的判斷要用到ray比較麻煩。






我的做法:(歡迎提供建議!)

單例物件:


每個星星物件都有的腳本:


再來是超陽春星星產生器:

在來是判斷的主角! 圈圈的控制腳本:

我用一個清單紀錄在圈圈裡的星星id,當星星離開即刪除該星星id

明明有個OnTriggerStay2D方法,何苦這要自己紀錄呢?
其實我原本也是用OnTriggerStay2D(),但發現它觸發的很不靈敏,很多時候明明星星都在圈內了,按了就是不給觸發  如果各位知道這問題出在哪裡,還請告訴我啊
如果真的成了,那程式碼又能更短的說....


心得:
在真正開始認識event system之前,我最常也可以說是唯一會用到的委託方法大概就是SceneManager LoadScene的時候了。 參考

還記得我年初做的音樂打擊遊戲嗎?
我是在每個打擊點物件上放一個用Ray偵測是否按到此物件的腳本,感覺想法跟此次實作差不了太多。
不過event可以直接回傳被互動的物件的資訊,而我之前的作法則是把所有點到的"物件本身"都蒐集起來,才再其中找出我要的資訊。

[腦動大開]
感覺使用event是個擴充性很強的一個做法,像是若我想幫角色增加一個暫時性的回血BUFF,是不是就可以在event掛上回血的方法呢?!



雜談:
明明要大考了我還在這裡玩Unity

然後如果我沒有怠惰的話....想做個可愛紓壓的像素走路模擬遊戲XD

送禮物贊助創作者 !
0
留言

創作回應

樂小呈
event真的是有夠強的!

加U!
2020-01-01 10:05:15
悠閒紅茶
不愧是大佬,我完全看不懂,只覺得好厲害啊...

2020-01-01 10:50:57
偽娘控鮭魚
大佬…
2020-01-01 15:24:28
NN
佬您好
我期末做unity2D遊戲做到快崩潰ㄌTT
2020-01-01 19:11:52
追蹤 創作集

作者相關創作

更多創作