上一篇我們已經將尖刺怪的功能都介紹完畢了,在準備製作下一隻怪物之前,突然發現怪物之間的基本功能幾乎都差不多,都會追蹤主角、攻擊還有死亡,如果我們每隻怪物都獨自寫個腳本,內容又幾乎都差不多那就太愚蠢了,所以為了讓開發更加快速,不要有過多重複的程式碼,我們決定使用繼承,把會重複到的功能都放在父類別裡,每一隻怪物獨有的功能則放在子類別裡面,那就讓我們來看看該怎麼做吧!
繼承用的父腳本,變數和函式盡量不要用private,否則子腳本會讀不到,我們可以將原先的private改成protected
,當然public不變還是public
。
還有另外一種情況,像是主角攻擊怪物時,怪物的扣血是讓主角程式來抓怪物身上的TakeDamage函式,但每隻怪物有可能受攻擊的形式不同,所以我們可以在父腳本依舊放上TakeDamagec函式,讓子腳本來覆寫這個函式,那它的做法如下:
public
函式,而且還要加上virtual
,如此一來就可以讓子腳本來覆寫這個函式了若要讓子腳本繼承父腳本時,我們需要再子類別冒號的後方加上父腳本的名稱來表示繼承。
另外,剛剛所說的覆寫父腳本函式,在子腳本裡覆寫的韓式要記得加上override
,如下方的程式碼一樣。
這樣基本上繼承就搞定囉,但可能讀者心中會有一個疑問,那怪物的Inspector到底是要掛父腳本還是子腳本,亦還是兩者都要放進去呢?
現在就要為大家來解答,我們只要在物件上放子腳本就可以囉!因為我們已經有在子腳本的開頭說明是要繼承哪一個父腳本,它就會自動去找Assets相同名稱的腳本了。
那繼承方式就到這裡說明完畢,大家可以回去試試看,不要再傻傻的每隻怪物都再寫一次功能差不多的腳本了,繼承真的是個好方法,也會讓開發便利許多喔!