Unity C# | 碰撞事件的撰寫

閱讀時間約 3 分鐘

前言

  這篇文章將會講述碰撞事件的撰寫,跟碰撞事件有關的函式共有六種,分別為 OnCollisionEnter/Stay/Exit 和 OnTriggerEnter / Stay /Exit ,本篇文章將會講述通用的邏輯。

Collider | 碰撞體

  在之前我從組件(Component)和程式(c#)來介紹碰撞相關的程式碼和遊戲組建,今天這篇文章會面向「使用程式碰撞體撰寫事件」,比較基礎的知識可以參考下列文章:

Tag | 標籤

  同時今天會講述到標籤的使用,這是在 Unity 介面中很常看到的東西,掛載在遊戲物件中,詳請可以參考之前的一篇文章

OnCollision/Trigger... | 碰撞事件和觸發事件

  在程式撰寫中,會很頻繁的使用 Collider 來進行碰撞或觸發的撰寫,接下來會從定義開始,再到應用進行介紹。

定義

Void OnTriggerEnter(Collider other)
{ 
  Debug.Log("觸發碰撞事件");
}
  碰撞事件和觸發事件簡稱本事件,上述程式碼是 OnCollisionEnter 的函式,當符合條件的遊戲物件剛觸碰到本物件,則會呼叫一次本事件,其中 other 的資料型態是 Collider ,遊戲物件會被儲存在這個欄位,有點難懂嗎?接下來讓我們從頭開始。

簡單配置

  首先,我們有一個遊戲物件,像是遊戲的主角,上面掛載著 Rigidbody 和 Collider ,同時,有另一個掛載 Collider 的物件,這個 Collider 中的 isTrigger可能被勾選。
  這兩個物件中,無論程式腳本掛在哪一個物件中,這個碰撞 / 觸發的機制都會成立,因此都會運作,只是讓程式運作的主體不同。

應用

  接下來會使用玩家跟陷阱的事件作為介紹。
1. 建立一個能移動的玩家,無論是使用 Cube 或製作一個人物都可以,讓他掛載 Rigidbody 和 Collider 。
2. 建立一個遊戲物件,裝上 Collider,並把遊戲物件命名為陷阱(trap)。
3. 創建一個程式腳本,放進玩家或陷阱,把裡面的 Start 和 Update 刪除,並新增一個 OnCollisionEnter 的函式,這個函式跟前面刪掉的兩個函式相同,屬於 Unity 官方內建,因此如果沒辦法連接到 Unity 資料庫,那你應該是寫錯了。
4. 此時已經可以觸發事件了,如果你用 Debug.Log 去確認,你會發現當玩家跟陷阱碰撞後,這個函式已經可以運作了。
5. 在事件內添加 If 判斷句,直接使用後面的 other ,此時你會發現可以調動這個 Collision 的其他資訊,像是 GameObject 、 Tag 等等,此時你可以藉此控制碰撞的對象,此時你撰寫程式碼抓取特定 Tag,如果 Unity 不存在這個Tag 的名稱,你依然可以先用程式碼去抓取。
6. 在 Unity 中 Tag 和 Layers 的部分,新增一個 Tag ,命名前面抓取的 Tag 名稱,並讓沒放程式腳本的另一個物件擁有這個 Tag。
7. 至此,你的玩家可以在碰觸到陷阱時觸發事件,而碰觸到其他物件不會有任何反應了。

後記

  至此,碰撞的基礎使用已經都講解完了,如果未來有想到更專業的使用方式才會有新的章節。

參考資料

Unity API | OnCollisionEnter(Collision)

瓶裝雪

為什麼會看到廣告
104會員
247內容數
對設計師如何成長為設計師好奇嗎? 2020年九月,我進入大學學習當一位設計師,從開始到沉寂,再到重燃熱忱,我將在方格子紀錄我的成長歷程、理念、心情,分享我在這段旅程中所經歷的故事。
留言0
查看全部
發表第一個留言支持創作者!
瓶裝雪的沙龍 的其他內容
前言   這篇文章將會介紹 UI 排版的實用工具。 GridLayoutGroup | 網格排版工具   這是我在撰寫遊戲 UI 時很常使用的 Component 今天在思考新的文章要寫什麼時發現還沒寫過,因此來跟大家介紹這時用的小組件。 運作原理   本質上來說,這個組件會控制他所有的子物件,並且
這篇文章會介紹圖層及相關應用,並藉由範例流程直白理解圖層的功用。
前言   這篇文章將會介紹生成物件的五種多載說明和三種應用流程。 Instantiate | 生成遊戲物件   這個英文單字的中文翻譯為「實例化」,如果單純用於 GameObject 的話你可以叫他生成物件,不過 Instatiate 還有其他的功用,像是 Clone 腳本和泛型化,這個就不在我們今
這篇文章將會講述新增造型的種類及簡單介紹。
這篇文章將會講述新增造型的種類及簡單介紹。
這篇文章將會介紹 Probuder ,Unity 官方製作的關卡設計工具。 Probuder | 關卡設計的利器
前言   這篇文章將會介紹 UI 排版的實用工具。 GridLayoutGroup | 網格排版工具   這是我在撰寫遊戲 UI 時很常使用的 Component 今天在思考新的文章要寫什麼時發現還沒寫過,因此來跟大家介紹這時用的小組件。 運作原理   本質上來說,這個組件會控制他所有的子物件,並且
這篇文章會介紹圖層及相關應用,並藉由範例流程直白理解圖層的功用。
前言   這篇文章將會介紹生成物件的五種多載說明和三種應用流程。 Instantiate | 生成遊戲物件   這個英文單字的中文翻譯為「實例化」,如果單純用於 GameObject 的話你可以叫他生成物件,不過 Instatiate 還有其他的功用,像是 Clone 腳本和泛型化,這個就不在我們今
這篇文章將會講述新增造型的種類及簡單介紹。
這篇文章將會講述新增造型的種類及簡單介紹。
這篇文章將會介紹 Probuder ,Unity 官方製作的關卡設計工具。 Probuder | 關卡設計的利器
你可能也想看
Google News 追蹤
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
C#編程基礎筆記 1. 變量(Variables) - 變量是編程的最基本單位 - 技術上是計算機內存中存儲值的一小部分 - 實際上是一個容器,可以存儲不同類型的信息 - 變量必須有唯一的名稱 - 充當值的佔位符 示例: ```csharp public int Current
Unity 2022 與 C# 程式設計:第一章完整詳細摘要
Thumbnail
最近ChatGPT-4o的發布引起了我的注意,又在Youtube看上見有人教學如何用ChatGPT設計屬於自己的家教,被他的能力震撼到的我一頭熱就訂閱了plus版然後馬上設計了一個自己的家教。最一開始的時候我只有把它用來學習語言的輔助,但用著用著忽然想到:「如果我把它用來引導我學習我沒有學過的領域呢
Thumbnail
遊戲引擎開發商 Unity 一直是我感覺很有發展潛力的企業,《原神》、《王者榮耀》等明星遊戲都是透過其引擎所建構,在手遊開發領域,擁有絕對統治力。然而,營運實績與線圖走勢卻不是如此,近 8 季毛利成長率有 4 季為負,1Q24 營運收入是近 8 季來最低值,-$375M…
Thumbnail
完成了Debug.log()的測試,接著還是要跟各位簡單講一下C#的一些規則,之後看程式會(比較)看得懂。 又講到變數? 在Unity中,變數是重要的工具,用來儲存和管理資料。讓開發者能夠靈活調整遊戲的行為和性能,減少代碼的重複性,使得遊戲開發更加高效和簡潔。透過使用變數,開發者可以輕鬆修改資料
Thumbnail
這篇文章將會講述虛擬(virtual)與覆蓋(override)的簡易使用方式。
Thumbnail
前言 這是紀錄本人學習Unity C#時的筆記,希望讓自己能夠整理思緒,方便記憶。 因為是新手自學的關係,也很有可能有誤解或錯誤的地方,請見諒… 類別Class 創造類別之後就可以持續使用創建的類別來創建物件,以武器為例,在遊戲裡有不同的武器,但是他們的屬性是一樣的,我們就可以在一個類別裡面設定不同
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
C#編程基礎筆記 1. 變量(Variables) - 變量是編程的最基本單位 - 技術上是計算機內存中存儲值的一小部分 - 實際上是一個容器,可以存儲不同類型的信息 - 變量必須有唯一的名稱 - 充當值的佔位符 示例: ```csharp public int Current
Unity 2022 與 C# 程式設計:第一章完整詳細摘要
Thumbnail
最近ChatGPT-4o的發布引起了我的注意,又在Youtube看上見有人教學如何用ChatGPT設計屬於自己的家教,被他的能力震撼到的我一頭熱就訂閱了plus版然後馬上設計了一個自己的家教。最一開始的時候我只有把它用來學習語言的輔助,但用著用著忽然想到:「如果我把它用來引導我學習我沒有學過的領域呢
Thumbnail
遊戲引擎開發商 Unity 一直是我感覺很有發展潛力的企業,《原神》、《王者榮耀》等明星遊戲都是透過其引擎所建構,在手遊開發領域,擁有絕對統治力。然而,營運實績與線圖走勢卻不是如此,近 8 季毛利成長率有 4 季為負,1Q24 營運收入是近 8 季來最低值,-$375M…
Thumbnail
完成了Debug.log()的測試,接著還是要跟各位簡單講一下C#的一些規則,之後看程式會(比較)看得懂。 又講到變數? 在Unity中,變數是重要的工具,用來儲存和管理資料。讓開發者能夠靈活調整遊戲的行為和性能,減少代碼的重複性,使得遊戲開發更加高效和簡潔。透過使用變數,開發者可以輕鬆修改資料
Thumbnail
這篇文章將會講述虛擬(virtual)與覆蓋(override)的簡易使用方式。
Thumbnail
前言 這是紀錄本人學習Unity C#時的筆記,希望讓自己能夠整理思緒,方便記憶。 因為是新手自學的關係,也很有可能有誤解或錯誤的地方,請見諒… 類別Class 創造類別之後就可以持續使用創建的類別來創建物件,以武器為例,在遊戲裡有不同的武器,但是他們的屬性是一樣的,我們就可以在一個類別裡面設定不同