iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 20
0

上一篇我們已經將尖刺怪的功能都介紹完畢了,在準備製作下一隻怪物之前,突然發現怪物之間的基本功能幾乎都差不多,都會追蹤主角、攻擊還有死亡,如果我們每隻怪物都獨自寫個腳本,內容又幾乎都差不多那就太愚蠢了,所以為了讓開發更加快速,不要有過多重複的程式碼,我們決定使用繼承,把會重複到的功能都放在父類別裡,每一隻怪物獨有的功能則放在子類別裡面,那就讓我們來看看該怎麼做吧!

父腳本

繼承用的父腳本,變數和函式盡量不要用private,否則子腳本會讀不到,我們可以將原先的private改成protected,當然public不變還是public

變數

https://ithelp.ithome.com.tw/upload/images/20200914/20130414J32hgI5EQm.jpg

函式

https://ithelp.ithome.com.tw/upload/images/20200914/20130414z6svbdwopd.jpg

還有另外一種情況,像是主角攻擊怪物時,怪物的扣血是讓主角程式來抓怪物身上的TakeDamage函式,但每隻怪物有可能受攻擊的形式不同,所以我們可以在父腳本依舊放上TakeDamagec函式,讓子腳本來覆寫這個函式,那它的做法如下:

  • 將要覆寫的函式設定成public函式,而且還要加上virtual,如此一來就可以讓子腳本來覆寫這個函式了
    https://ithelp.ithome.com.tw/upload/images/20200914/201304145Q1ESGAj7f.jpg

子腳本

若要讓子腳本繼承父腳本時,我們需要再子類別冒號的後方加上父腳本的名稱來表示繼承。
https://ithelp.ithome.com.tw/upload/images/20200914/20130414HLjXDj6BHQ.jpg

另外,剛剛所說的覆寫父腳本函式,在子腳本裡覆寫的韓式要記得加上override,如下方的程式碼一樣。
https://ithelp.ithome.com.tw/upload/images/20200914/20130414xiBaDdtG4T.jpg

這樣基本上繼承就搞定囉,但可能讀者心中會有一個疑問,那怪物的Inspector到底是要掛父腳本還是子腳本,亦還是兩者都要放進去呢?

現在就要為大家來解答,我們只要在物件上放子腳本就可以囉!因為我們已經有在子腳本的開頭說明是要繼承哪一個父腳本,它就會自動去找Assets相同名稱的腳本了。

https://ithelp.ithome.com.tw/upload/images/20200914/20130414s5AuRUplLr.jpg

那繼承方式就到這裡說明完畢,大家可以回去試試看,不要再傻傻的每隻怪物都再寫一次功能差不多的腳本了,繼承真的是個好方法,也會讓開發便利許多喔!


上一篇
[Day19]尖刺怪-死亡與復活
下一篇
[Day21]骨頭魚-追蹤主角
系列文
Unity遊戲開發與實踐-BlueRemedy內容分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言