Unity C# | virtual & override

更新於 發佈於 閱讀時間約 4 分鐘

一、前言

  這篇文章將會講述虛擬(virtual)與覆蓋(override)的簡易使用方式。


二、虛擬(virtual)

  虛擬具有多態性(Polymorphism)與擴展性(Extensibility),能讓程式根據實際運用產生不同效果,並方便程式員擴展程式碼而不用訪問基類。


1. 多態性(Polymorphism)

  當基類中的方法被標記為 virtual 時,它可以在派生類別中被覆寫(override)。當A腳本繼承B的內容時,稱B為基類、A為派生類別。這使得相同的函式,根據實際對象的類型而執行不同的實現,這稱之為多態性。


2. 擴展性(Extensibility)

  因為覆寫的存在,可以在不觸碰基類的情況下,擴增或修改基類的函式與變數,這種在不修改現有程式碼的情況下增加功能,稱為擴展性。


3. 存取修飾詞

  談到繼承與覆寫,就可以了解一個新的存取修飾詞"protected"了,該存取修飾詞所修飾的欄位,只有在派生類別才能存取。


三、覆蓋(override)

  基本上覆蓋(override)跟虛擬(virtual)是一起使用的,用於派生類別中覆蓋基類的函式或變數。


1. 用法

  在派生類別中,創建一個與基類一模一樣的函式,在其存取修飾詞後面添加"Override"修飾詞即可。使用 override 以後,就可改寫該函式或變數,可以結合基類的程式,或是完全重寫。


2. 基類

  在派生類別中,如果想執行基類的程式,則可以在覆蓋的函式中打上"Base.Function();"來執行基類的函式,該處的 Function(); 則是這個函式的名稱。


四、使用流程

  在 Unity 中,有一個很常用的繼承,那就是 MonoBehaviour,任何腳本只能繼承一個類別,因此可能會被 Monobehaviour 給困住,只要把含 MonoBehaviour 的腳本當作基類即可。


1. 在 Unity 中創建空腳本

  在 Unity 中創建一個空的腳本,命名為"VirtualTest"並刪除不必要的 Start 與 Update 函式。


using UnityEngine;


public class VirtualTest : MonoBehaviour

{

}


2. 宣告虛擬類型

  隨後,宣告虛擬類型。


using UnityEngine;


public class VirtualTest : MonoBehaviour

{

protected virtual void virtualMethod() { }

}


3. 創建新的腳本並繼承腳本

  創建一個新的腳本"VirtualTest_Child",同樣刪除不必要的函式,這次把 Monobehaviour 換成"VirtualTest"。


using UnityEngine;


public class VirtualTest_Child : VirtualTest

{

}


4. 覆蓋虛擬類型

  創建同樣命名的函式,連同存取關鍵字一起照抄,原本 virtual 的位置改為 override ,這樣就成功了。


using UnityEngine;


public class VirtualTest_Child : VirtualTest

{

protected override void virtualMethod()

{

//Do something

}

}


5. 執行基類程式

  如果希望執行基類程式,則添加"base.virtualMethod();"即可,該行程式碼會執行基類的程式內容。


using UnityEngine;


public class VirtualTest_Child : VirtualTest

{

protected override void virtualMethod()

{

base.virtualMethod();

}

}


五、後記

  最近天氣真的很冷,還要趕專題的進度,總覺得寫文章的時間越來越少了阿。

留言
avatar-img
留言分享你的想法!
avatar-img
瓶裝雪的沙龍
108會員
247內容數
對設計師如何成長為設計師好奇嗎? 2020年九月,我進入大學學習當一位設計師,從開始到沉寂,再到重燃熱忱,我將在方格子紀錄我的成長歷程、理念、心情,分享我在這段旅程中所經歷的故事。
瓶裝雪的沙龍的其他內容
2024/09/22
魔火術師是第三人稱動作射擊遊戲,屬於專題畢業製作,在畢業組成新的團隊後優化並上架。
Thumbnail
2024/09/22
魔火術師是第三人稱動作射擊遊戲,屬於專題畢業製作,在畢業組成新的團隊後優化並上架。
Thumbnail
2023/12/29
講述遊戲設計從新手到專業的發展方向。
Thumbnail
2023/12/29
講述遊戲設計從新手到專業的發展方向。
Thumbnail
2023/12/26
期末結束了,我將分享我的作品、開發狀況、開發方向。
Thumbnail
2023/12/26
期末結束了,我將分享我的作品、開發狀況、開發方向。
Thumbnail
看更多
你可能也想看
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
提供一條簡單公式、一套盤點思路,幫助你快速算出去日本自助旅遊需要準備多少日幣現金!
Thumbnail
提供一條簡單公式、一套盤點思路,幫助你快速算出去日本自助旅遊需要準備多少日幣現金!
Thumbnail
這篇內容,將會用一個簡單的範例,來解釋物件(Object)和實體(Instance)的差別。包括Instance的簡介、ID、物件改變會影響實體。
Thumbnail
這篇內容,將會用一個簡單的範例,來解釋物件(Object)和實體(Instance)的差別。包括Instance的簡介、ID、物件改變會影響實體。
Thumbnail
如果實在找不到可用的替代軟體,或者就是要用指定的軟體不可,那麼虛擬機器可以作為在使用Linux時的一個應對方案。
Thumbnail
如果實在找不到可用的替代軟體,或者就是要用指定的軟體不可,那麼虛擬機器可以作為在使用Linux時的一個應對方案。
Thumbnail
自訂元件生成位置顧名思義就是可以指定部分HTML區塊渲染在特定的畫面上,即使在不同組件也能把A組件內的部分畫面,展現在B組件上,以下方程式舉例。
Thumbnail
自訂元件生成位置顧名思義就是可以指定部分HTML區塊渲染在特定的畫面上,即使在不同組件也能把A組件內的部分畫面,展現在B組件上,以下方程式舉例。
Thumbnail
樣板模式的定義極為簡單,卻是大型系統程式、WEB/APP應用框架的設計核心,完美展現設計模式的價值: 簡單、高效、強大。
Thumbnail
樣板模式的定義極為簡單,卻是大型系統程式、WEB/APP應用框架的設計核心,完美展現設計模式的價值: 簡單、高效、強大。
Thumbnail
完成了Debug.log()的測試,接著還是要跟各位簡單講一下C#的一些規則,之後看程式會(比較)看得懂。 又講到變數? 在Unity中,變數是重要的工具,用來儲存和管理資料。讓開發者能夠靈活調整遊戲的行為和性能,減少代碼的重複性,使得遊戲開發更加高效和簡潔。透過使用變數,開發者可以輕鬆修改資料
Thumbnail
完成了Debug.log()的測試,接著還是要跟各位簡單講一下C#的一些規則,之後看程式會(比較)看得懂。 又講到變數? 在Unity中,變數是重要的工具,用來儲存和管理資料。讓開發者能夠靈活調整遊戲的行為和性能,減少代碼的重複性,使得遊戲開發更加高效和簡潔。透過使用變數,開發者可以輕鬆修改資料
Thumbnail
代理模式通過封裝原始對象來實現對該對象的控制和管理,同時不改變原始對象的行為或客戶端與該對象互動的方式,以此介入或增強對該對象的訪問和操作。
Thumbnail
代理模式通過封裝原始對象來實現對該對象的控制和管理,同時不改變原始對象的行為或客戶端與該對象互動的方式,以此介入或增強對該對象的訪問和操作。
Thumbnail
想要進入工程師的世界,首先要先學會架設自己的Build code環境,有了編譯環境,接下來就可以安心的撰寫你想要的C語言程式啦! 如果你不知道該從何下手,那不妨先照著本篇文章的步驟做,Violet一步一步教你並解釋每個步驟的意義,很快你就會得到一個能編譯C語言程式碼的虛擬基環境哦!
Thumbnail
想要進入工程師的世界,首先要先學會架設自己的Build code環境,有了編譯環境,接下來就可以安心的撰寫你想要的C語言程式啦! 如果你不知道該從何下手,那不妨先照著本篇文章的步驟做,Violet一步一步教你並解釋每個步驟的意義,很快你就會得到一個能編譯C語言程式碼的虛擬基環境哦!
Thumbnail
這篇文章將會講述虛擬(virtual)與覆蓋(override)的簡易使用方式。
Thumbnail
這篇文章將會講述虛擬(virtual)與覆蓋(override)的簡易使用方式。
Thumbnail
到存放虛擬機的磁碟處\點選想要註冊的機器\註冊機器(登錄虛擬機器)
Thumbnail
到存放虛擬機的磁碟處\點選想要註冊的機器\註冊機器(登錄虛擬機器)
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News