Unity C# | OnCollisionEnter 的封裝

閱讀時間約 3 分鐘

一、前言

  這篇文章將會講述 Unity 自帶參數的功能,在撰寫時要怎麼進行封裝。

二、問題闡述

  在碰撞器與觸發器共六種 Unity 內建的官方函式中,因為要直接使用攜帶的參數,所以很多人會習慣性的把程式碼添加在內,要封裝時容易因為剛學習封裝的概念,導致出現錯誤。

三、解決方式

  要解決這個問題,有兩種方式可以辦到:第一種是用帶參數的函式封裝;第二種是用斜線註解的方式封裝,本次封裝示範的程式碼將用以下內容為示範:

public class OnCollisionEnterTest : MonoBehaviour
{
private void OnCollisionEnter(Collision collision)
{
if(collision.gameObject.CompareTag("Cube"))
{
//Do something.
}
}
}

1. 用帶參數的函式封裝

  我們很常在 OnCollisionEnter 及其他五種函式中看到類似的寫法,也因為沒有 Collision 導致無法直接換成函式,只需要多一個步驟,就是把 Collision也添加到函式就可以了。

private void OnCollisionEnter(Collision collision)
{
CatchCube(collision);
}
private void CatchCube(Collision collision)
{
if (collision.gameObject.CompareTag("Cube"))
{
//Do something.
}
}
}

  如果有其他在運作的程式碼,也可以用相同的方式進行封裝,這樣一來在官方函式的下面會有很漂亮的不同功能,而不是雜亂的一堆程式碼。

2. 用斜線註解

  運用斜線進行註解也是可行的做法,如果不想要把程式碼切割分的太細,則可以考慮用斜線註解的方式,避免下一次編輯程式的時候還需要閱讀程式碼,可以直接開始撰寫新的內容。

private void OnCollisionEnter(Collision collision)
{
//Catch Cube To Do Something.
if(collision.gameObject.CompareTag("Cube"))
{
//Do something.
}
}

  這就是一個很好的例子,我們把抓取 Cube 的程式碼前面說明公用,未來就可以略過這個程式碼去理解其他部分,或是針對這個部分去進行維護,優點在於可以提供更多資訊,缺點在於程式碼變長了。

四、其他應用

  在使用其他人撰寫的插件包時,我們也會遇到這樣的情況,他們大多數人在撰寫的時候都沒有經過妥當的封裝,而是在 Update 就寫完了所有的功能,並且在Update 裡面撰寫暫時變數。

  在之前我只能逐字去閱讀,非常沒有效率,也容易失去焦點,現在我們可以用帶參數的函式去封裝程式碼,把功能逐步拆分開來,整理完程式碼的同時,對於這個插件包的功用也就理解了。

五、後記

  這篇文章講的東西其實不是那麼的特別,甚至我認為可能不用寫成文章,因為有人會跟我說:「不是本來就這樣做嗎?」,但我又想到我之前的確是不知道這件事情,想了想就寫一篇文章講述這件事情了。

avatar-img
106會員
247內容數
對設計師如何成長為設計師好奇嗎? 2020年九月,我進入大學學習當一位設計師,從開始到沉寂,再到重燃熱忱,我將在方格子紀錄我的成長歷程、理念、心情,分享我在這段旅程中所經歷的故事。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
瓶裝雪的沙龍 的其他內容
這篇文章將會講述如何使用程式腳本讀取 Input System 的玩家輸入。
這篇文章將會講述角色控制器(CharacterController )的基本概述,並且分析其中可能的應用方式,最後簡單講述它的使用方式心得。
這篇文章將會講述物件池的基本概述,並介紹應用方向。
這篇文章將會從基本概述到射線偵測應用的詳細步驟,講述運用射線改變特定圖層中,射線命中的物件顏色。
這篇文章將會講述平滑的旋轉與單次旋轉的差異,並介紹旋轉的兩種體系與其使用效果,並提供參考的示範影片。
這篇文章將會講述常見的座標(Transform)旋轉方式,適合初學者到進階程式員複習。
這篇文章將會講述如何使用程式腳本讀取 Input System 的玩家輸入。
這篇文章將會講述角色控制器(CharacterController )的基本概述,並且分析其中可能的應用方式,最後簡單講述它的使用方式心得。
這篇文章將會講述物件池的基本概述,並介紹應用方向。
這篇文章將會從基本概述到射線偵測應用的詳細步驟,講述運用射線改變特定圖層中,射線命中的物件顏色。
這篇文章將會講述平滑的旋轉與單次旋轉的差異,並介紹旋轉的兩種體系與其使用效果,並提供參考的示範影片。
這篇文章將會講述常見的座標(Transform)旋轉方式,適合初學者到進階程式員複習。
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
深入探討變數、型別和方法 正確撰寫 C# 程式碼 基本語法規則 程式碼行就像句子一樣,需要有某種分隔或結束字符。每一行 C# 程式碼(稱為陳述式)必須以分號結尾,以便程式碼編譯器處理。 例如,一個簡單的變數可以這樣寫: ```csharp public string FirstNam
Thumbnail
這篇內容,將會講解什麼是腳本函式,以及與腳本函式相關的知識。包括腳本的簡介、使用函式(或全域變數)的注意事項、定義全域變數、定義函式、什麼是宣告、局部變數的應用。
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
※ OPP第一大核心-封裝 封裝的精神在於將「方法」、「屬性」和「邏輯」包裝在類別裡面,透過類別的實例來實現。這樣外部物件不需要了解內部的實現細節,只需要知道如何使用該類別提供的接口即可。換句話說,封裝是將內部細節隱藏起來,只暴露必要的部分給使用者。 封裝的核心概念是,使用者如果想要接觸資料,只
Thumbnail
本章講述了C#開發中的程序集,命名空間和 NuGet 包管理器。程序集是 .NET 應用的基礎,命名空間用於組織和預防命名衝突,而 NuGet 用於管理 .NET 的外部庫和依賴項。
Thumbnail
上次我們完成用Unity 建完一張椅子,還有學習基本變數的應用,那我們就繼續寫更多的腳本來讓物體有更多的ㄅㄧㄢ #一般不會用Unity來建模啦,主要還是要靠其他3D軟體導入 ●Gravity Scale 重力預設為1,是造成物體下墜的主因,可以先調到0。 (Unity有支援負
Thumbnail
完成了Debug.log()的測試,接著還是要跟各位簡單講一下C#的一些規則,之後看程式會(比較)看得懂。 又講到變數? 在Unity中,變數是重要的工具,用來儲存和管理資料。讓開發者能夠靈活調整遊戲的行為和性能,減少代碼的重複性,使得遊戲開發更加高效和簡潔。透過使用變數,開發者可以輕鬆修改資料
物件導向設計的一個重點就是封裝,這有很多層面上的意義,但基本上就是控制物件的成員變數和方法的存取權。物件導向的封裝還跟繼承機制有關,這使得有一些時候我們逼不得已必須把函式定義在類別上,這種做法使得物件的功能變得難以拆解。封裝應該是模組的職責,並不需要再給物件相同的能力。 一般的模組系統就是把相
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
深入探討變數、型別和方法 正確撰寫 C# 程式碼 基本語法規則 程式碼行就像句子一樣,需要有某種分隔或結束字符。每一行 C# 程式碼(稱為陳述式)必須以分號結尾,以便程式碼編譯器處理。 例如,一個簡單的變數可以這樣寫: ```csharp public string FirstNam
Thumbnail
這篇內容,將會講解什麼是腳本函式,以及與腳本函式相關的知識。包括腳本的簡介、使用函式(或全域變數)的注意事項、定義全域變數、定義函式、什麼是宣告、局部變數的應用。
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
※ OPP第一大核心-封裝 封裝的精神在於將「方法」、「屬性」和「邏輯」包裝在類別裡面,透過類別的實例來實現。這樣外部物件不需要了解內部的實現細節,只需要知道如何使用該類別提供的接口即可。換句話說,封裝是將內部細節隱藏起來,只暴露必要的部分給使用者。 封裝的核心概念是,使用者如果想要接觸資料,只
Thumbnail
本章講述了C#開發中的程序集,命名空間和 NuGet 包管理器。程序集是 .NET 應用的基礎,命名空間用於組織和預防命名衝突,而 NuGet 用於管理 .NET 的外部庫和依賴項。
Thumbnail
上次我們完成用Unity 建完一張椅子,還有學習基本變數的應用,那我們就繼續寫更多的腳本來讓物體有更多的ㄅㄧㄢ #一般不會用Unity來建模啦,主要還是要靠其他3D軟體導入 ●Gravity Scale 重力預設為1,是造成物體下墜的主因,可以先調到0。 (Unity有支援負
Thumbnail
完成了Debug.log()的測試,接著還是要跟各位簡單講一下C#的一些規則,之後看程式會(比較)看得懂。 又講到變數? 在Unity中,變數是重要的工具,用來儲存和管理資料。讓開發者能夠靈活調整遊戲的行為和性能,減少代碼的重複性,使得遊戲開發更加高效和簡潔。透過使用變數,開發者可以輕鬆修改資料
物件導向設計的一個重點就是封裝,這有很多層面上的意義,但基本上就是控制物件的成員變數和方法的存取權。物件導向的封裝還跟繼承機制有關,這使得有一些時候我們逼不得已必須把函式定義在類別上,這種做法使得物件的功能變得難以拆解。封裝應該是模組的職責,並不需要再給物件相同的能力。 一般的模組系統就是把相