一、前言
這篇文章將會(huì)講述 Unity C# 中關(guān)於 Interface (介面/接口)的基本介紹以及原理說(shuō)明,最後提供完整的使用流程。
二、介面 | Interface
我在撰寫(xiě)程式的這段時(shí)間中,其實(shí)我都沒(méi)有使用介面,但依然認(rèn)為這是必須要學(xué)習(xí)的知識(shí),因?yàn)閷?shí)在有太多地方講述介面的用處了,正式學(xué)習(xí)後,我更加堅(jiān)定這股想法了。
a. 簡(jiǎn)介
定義一個(gè)規(guī)範(fàn),讓之後的程式腳本在實(shí)作時(shí)遵守結(jié)構(gòu),並且實(shí)作出各自不同的細(xì)節(jié),其他程式也能通過(guò)抓取介面,來(lái)取得定義好的屬性與函式。
b. 抽象
這是我接觸的第一個(gè)抽象資料型態(tài),我發(fā)現(xiàn)抽象能處理的事情會(huì)比實(shí)作還要多不少,不過(guò)在前期的規(guī)劃與流程中,會(huì)複雜很多並且難以理解。
抽象的資料型態(tài),除了 Interface 以外,還有 Abstract 、 Virtual 這兩個(gè)資料型態(tài)有印象可以學(xué)習(xí),搜尋資料後,還有 Generic 、Delegate 可以學(xué)習(xí),期中委派已經(jīng)有了解部分了。
c. 用途
在遊戲設(shè)計(jì)中,我自己判斷介面的用途偏向於抓取,不過(guò)相較於普通的抓取物件來(lái)說(shuō),介面的便利性與效能都更加優(yōu)秀,唯一的問(wèn)題可能是需要規(guī)劃,這容易造成後期不好維護(hù)。
三、原理說(shuō)明
接下來(lái)會(huì)從名稱與特色說(shuō)明 Interface 的運(yùn)作原理。
a. 介面與接口
這是我繪製的示意圖,可以簡(jiǎn)單理解介面的原理:第一點(diǎn),只要實(shí)作同一個(gè)介面的程式腳本,裡面一定會(huì)出現(xiàn)相同的資料結(jié)構(gòu);第二點(diǎn),其他程式腳本能以此介面名稱為接口,不需要抓取整個(gè)物件,也不需要知道其他程式內(nèi)容。
b. 抽象與實(shí)作
這兩個(gè)概念最大的差異,就是能不能直接指定到一個(gè)明確的物件,以介面這個(gè)資料型態(tài)來(lái)解釋,就是它沒(méi)有明確的某一個(gè)功能,因此能套用到多個(gè)物件的程式腳本中。
在程式設(shè)計(jì)中,會(huì)明確到哪一個(gè)變數(shù)會(huì)有哪些變量,因此實(shí)作是非常詳細(xì)的一種資料結(jié)構(gòu),也就不容易套用到各種情況了,不過(guò)實(shí)作因?yàn)槊鞔_清晰,在程式設(shè)計(jì)的過(guò)程中也相對(duì)直觀。
c. 不問(wèn)其身分
介面的特色,就是「不問(wèn)身份,只問(wèn)簽章」的概念,簽章的概念可以在微軟官方的一篇文章找到,簡(jiǎn)單來(lái)說(shuō),簽章是一種規(guī)範(fàn),只要符合規(guī)範(fàn)的對(duì)象就會(huì)娶得簽章。
換句話說(shuō),只要符合座號(hào)(屬性)與學(xué)生(函式)的對(duì)象,在判斷是不是叫做臺(tái)灣大學(xué)的介面時(shí)偷會(huì)通過(guò),不需要每一所大學(xué)都指定一次,也不需要過(guò)問(wèn)每個(gè)大學(xué)其他的功能。
四、介面的使用流程
接下來(lái)會(huì)講述如何使用 Interface 這個(gè)資料結(jié)構(gòu)。
a. 創(chuàng)建 Interface 資料結(jié)構(gòu)
首先,創(chuàng)建一個(gè) Interface,因?yàn)楦悇e(Class)的結(jié)構(gòu)相同,所以只需要公有或私有以及資料結(jié)構(gòu),再搭配一個(gè)程式碼區(qū)塊就可以了。
b. 定義屬性
接下來(lái),定義一個(gè)擁有讀寫(xiě)設(shè)定的屬性(property),關(guān)於讀跟寫(xiě)的介紹,在之前的一篇文章我有介紹,如果了解屬性的概念,直接撰寫(xiě)自己需要的屬性有哪些即可。
c. 定義函式
在這裡定義函示名稱即可,一樣依照需求安排數(shù)量。
d. 實(shí)作介面
接下來(lái),打開(kāi)想要實(shí)作介面的類別,並且在 Unity 內(nèi)建的實(shí)作類別 Monobehaviour 後面,打上一個(gè)「,」後添加自己撰寫(xiě)的介面名稱。
e. 履行簽章
隨後,在這個(gè)程式腳本中開(kāi)始履行簽章,把前面定義好的屬性以及函式一一撰寫(xiě)出來(lái),屬性就要用讀跟寫(xiě)與自己私有變數(shù)的關(guān)係,這些變數(shù)通常會(huì)在前面添加「_(底線)」用於表達(dá)這是用於介面的變數(shù),函式的話,只要名稱正確,其他就跟宣告其他函式相同。
f. 完成
這樣就完成介面的創(chuàng)建與實(shí)作了,在其他腳本就可以像是呼叫某個(gè)物件一樣來(lái)呼叫介面,並且可以抓取實(shí)作後介面的屬性與函式,進(jìn)行兩個(gè)資訊的交換,不用一一指定。
五、後記
這篇文章對(duì)我來(lái)說(shuō),是一個(gè)跨階段的成長(zhǎng),因?yàn)槲腋私庠觞N介紹一個(gè)新的概念,並且能寫(xiě)出完整的製作流程,學(xué)習(xí)到了一些新的名詞以後,未來(lái)我也可以藉由這篇文章來(lái)複習(xí),對(duì)於其他新手程式設(shè)計(jì)師,也有足夠的用處。
a. ChatGPT 與 Google 兩種蒐尋軟體的結(jié)合
在撰寫(xiě)這篇文章的時(shí)候,我的資料參考除了微軟的官方,我還有去詢問(wèn)GPT我應(yīng)該要怎麼撰寫(xiě),我聽(tīng)到介面是實(shí)作而不是繼承的時(shí)候,我以為人工智慧終於出錯(cuò)了,直到我找到官方文件,也是叫他實(shí)作,或許這種也稱為繼承?
b. 保持質(zhì)疑的態(tài)度
學(xué)習(xí)知識(shí)的過(guò)程,最重要的是保持質(zhì)疑的態(tài)度,先不說(shuō)會(huì)不會(huì)讓你找到正確答案,但在這個(gè)過(guò)程中絕對(duì)可以接觸更多的相關(guān)知識(shí),也能理解更多彼此相互印證的資訊。
c. 重新開(kāi)始經(jīng)營(yíng) Youtube 了
感謝你看完這篇文章,不知道它對(duì)你的幫助有多少呢?這是我在學(xué)習(xí)介面時(shí)撰寫(xiě)的程式碼與測(cè)試內(nèi)容,如果想了解更具體的介面測(cè)試影片,可以參考下面這部影片。
《Unity C# | Interface & Damage System (Easy)》