前言:
這次主要是程式碼的探討,也有最新進度的動圖。我滿菜的,如果以下有用錯詞或是有建議的部分都麻煩各位指點了
簡單來說,如果想讓其他腳本都能使用特定的方法,那把該方法設成static是最簡單的作法。
但這麼做有個問題,就是在static方法下的變數(shù)都要也是static。(全都設成static也是個做法,但我的語感跟我說很不OK
)
我之前用過的靜態(tài)方法大多是計算與回傳結(jié)果,所以不會有用到腳本全域變數(shù)的問題。
加上認識event後,腳本間的方法呼叫也大多用event。
但用了一段時間,我有發(fā)現(xiàn)用event的一些困難點與限制:
●event只能由宣告該event的腳本呼叫,其他腳本只能掛載/卸載方法上去。 錯誤訊息如下:
●若event的方法掛載沒有規(guī)劃一下,到中後期也會變得很亂,尤其event除了是null之外也不太會報錯,追朔起來也是一番辛苦。
●掛上event的方法傳入?yún)?shù)格式要跟event一模一樣,不管有沒有要用,這會讓有些參數(shù)是多餘的。
●event有個好處,不管方法是靜態(tài)、公開、私有,只要格式對應到就可以掛上去。
綜合以上,我最近腦洞開想到一個打法,不知道是不是正確的,亦或是有甚麼不良後果,所以想在這次更新中提出來討論。
以下為實作例子:
我有個"HitableObj"類別,讓擁有這個類別的物件被攻擊時,能扣血、判斷死亡和產(chǎn)生特效。其中,它有個static event Hit_event 在被攻擊時呼叫並傳入被攻擊物件與傷害。
(Hit掛在Hit_event上)
問題來了,玩家的攻擊腳本要怎麼使用這個Hit_event ?,因為在不同腳本,所以不能直接呼叫event。若是以前我的作法是把Hit_event放在玩家攻擊腳本,再掛載上HitableObj的Hit方法。但怪物攻擊呢? 若怪物的腳本也是一樣的做法,這樣就有2個相同功能的Hit_event在不同腳本裡,這會出現(xiàn)我上面提出的問題,到了後期會很亂。
我希望大家能呼叫一樣的Hit_event,且Hit_event放在HitableObj腳本裡提升模組化,(這樣下款遊戲就能直貼摳過去用了XD),於是寫了個靜態(tài)方法,讓其他腳本改由呼叫這個方法。
(因為方法是靜態(tài)的,所以event也要是靜態(tài)的,但掛在event上的方法就不限,因此每個是HitableObj的物件都可以有自己的設定,例如噴出來的特效不同。)
以上。
在打的時候一直有個問題困擾我:「真的需要用到event嗎? 」
我不確定,但我想到的其他方法還沒有這個做法來的能讓腳本獨立。
尤其是呼叫簡單: (為了配合攻擊動畫,所以在animation clip裡面放觸發(fā)方法:)
(先用圓形當判斷範圍擋一下XD,之後會再做精細一點)
以下是HitableObj的有那兩顆球和玩家。(新增連段與迴避)
打到會震動的呼叫方法原理也是一樣:
CameraFollow.cs:
HitableObj.cs:
像之前都會直接找該腳本的物件去呼叫方法,現(xiàn)在直接改成呼叫靜態(tài)方法去觸發(fā)event,但這有個尷尬點是把幾個變數(shù)改成靜態(tài)就可以直接呼叫,不用再透過event去掛。
這個思維是好是壞我還說不出來,不過確定的是我又看到新道路了XD。
雜紀:
炫一下我的新玩具>//<
在房間牆上貼120*210 公分的白板
(左邊是我老姊畫的甲甲)
在牆上寫字真的超浪漫的啦!! >//<