Unity C# | Instantiate GameObject

閱讀時間約 6 分鐘

前言

  這篇文章將會介紹生成物件的五種多載說明和三種應用流程。

Instantiate | 生成遊戲物件

  這個英文單字的中文翻譯為「實例化」,如果單純用於 GameObject 的話你可以叫他生成物件,不過 Instatiate 還有其他的功用,像是 Clone 腳本和泛型化,這個就不在我們今天的介紹範圍,因為我也不會。
  實例化可用於在運行時創建新對象。 示例包括用於射彈的對象,或用於爆炸效果的粒子系統,或是敵人生成和隨機生成物件,物件持裡面也包含實例化,基本上大量用到同一個物件時,可以考慮把物件變成預製物在用程式生成它。

多載函式

  在這邊簡單介紹一下多載函式,基本上同一個函式能放不同的函式參數,讓使用者用不同的參數達成不一樣的事情。

複雜度 1 | 單純生成

public static Object Instantiate(Object original);
  它會生成在遊戲中,其他一切默認,相同於你在 Hierarchy 中創建一個物件,我想這個多載用於複製程式腳本。

複雜度 2 | 單純生成,指定父物件

public static Object Instantiate(Object original, Transform parent);
  同上,不過會生成在指定的父物件下面,似乎座標也會跟父物件相同,但這個生成感覺也適用於程式腳本,也許某些...自由落體的炸彈也能使用?

複雜度 3 | 單純生成,指定父物件、座標系統

public static Object Instantiate(Object original, Transform parent, bool instantiateInWorldSpace);
  當地(Local)和世界(World)座標是兩個不同的東西,其他同上。

複雜度 4 | 生成物件,指定生成座標和面相方向 (最常用)

public static Object Instantiate(Object original, Vector3 position, Quaternion rotation);
  這是我們最常用的實例化,指定好生成物件,這通常會是一個預製物,也可以是遊戲物件,然後指定它的生成座標和面相方向, Quaternion 是座標的資料儲存形式,有興趣可以自行理解到能使用就好,細節不用。

複雜度 5 | 生成物件、指定座標和方向,安排父物件

public static Object Instantiate(Object original, Vector3 position, Quaternion rotation, Transform parent);
  這個跟上面幾乎都相同,不過可以指定父物件。

應用思路

  這次我想嘗試一個撰寫應用的方式,使用程式碼的方式太過於複雜,很難解是到比較全面的教學,對於非程式人員來說很難理解,我想用流程指南的方式去講解。

發射子彈

  有不少遊戲中,都有發射子彈的機制,這個機制的撰寫和運作流程如下:
1. 製作一顆子彈放進預置物,刪掉在 Hierarchy 中的遊戲物件,子彈能是一個圓球或是精心製作好的建模物件,甚至能加特效和材質。
2. 在要發射的位置創建一個空物件,這能是槍口或陷阱口等位置,並讓它的正前方 ( 正Z軸) 面相發射方向,在程式腳本中創建一個 void 函式,未來我們會在這個函式中抓取這個位置的資料。
3. 在程式腳本中,使用實例化函式,使用複雜度 4 的多載函式,總共會需要複製物件、生成座標、生成物件面相方向,全部直接抓取空物件資料即可,方向記得抓取 Local 座標 (transform.forward等),這段寫完以後,會生成子彈於槍口並面向發射發向。
4. 在子彈預製物中新增剛體 (rigidbody),讓它能跟隨牛頓的腳步,回到程式腳本中,新增速度,會需要子彈的速度方向,依照子彈的種類不同,從直直射出去到拋物線砲彈都可以。
5. 依照不同的需求,可能會需要按鍵發射、定時發射、觸發發射,撰寫好發射的機制,可能是按鍵、計時器、觸發偵測,把 void 函式放進去,這個步驟可以移到步驟 2 之前,方便測試。
6. 測試、除錯、優化,最後完成它。

粒子系統

  實例化通常用於一次性的特效,譬如說煙花、爆炸、水波等等。
1. 製作好特效的預製物,它可是商店的素材或自己的作品,把它放在 Assets中而非 Hierarchy。
2. 在爆炸發生的位置創建一個空物件,或是在需要爆炸的物件上寫程式腳本。
3. 依照不同的需求,可能會需要一次性爆發、一次爆發多次、觸發爆炸、定時爆發等等,可能是碰撞偵測、計時器、隨機位置、觸發偵測等等,確定程式能正常運作,像是 Debug.Log 輸入一段文字。
4. 在程式腳本使用實例化函式,使用複雜度 4 的多載函式,總共會需要複製物件、生成座標、生成物件面相方向,全部直接抓取步驟2的資料即可。
5. 因為特效自己會運作,所以這樣就完成了,一樣會需要測試、除錯、優化。

敵人生成

  遊戲中的敵人通常會使用實例化生成。
1. 製作好敵人的預製物,它可是商店的素材或自己的作品,把它放在 Assets中而非 Hierarchy。
2. 在敵人生成的位置創建一個空物件。
3. 依照不同的需求,位置上有定點生成、平面範圍生成、立體範圍生成,生成方式有定時出現、觸發出現、隨機出現,可能是計時器、隨機位置和時間、觸發偵測等等,確定程式能正常運作,像是 Debug.Log 輸入多段文字。
4. 在程式腳本使用實例化函式,使用複雜度 4 的多載函式,總共會需要複製物件、生成座標、生成物件面相方向,全部直接抓取步驟2的資料即可。
5. 因為敵人通常具備 AI,無論簡單還是複雜,自己都會運作,所以這樣就完成了,一樣會需要測試、除錯、優化。

參考資料

Unity API | Object.Instantiate

Unity 官方說明和實作教學

後記

  我在嘗試一些新的東西和寫作方式,像是條列化與流程化,並盡量能讓各種不同的族群了解遊戲程式在做的事情,結果花了我不少時間...
為什麼會看到廣告
105會員
247內容數
對設計師如何成長為設計師好奇嗎? 2020年九月,我進入大學學習當一位設計師,從開始到沉寂,再到重燃熱忱,我將在方格子紀錄我的成長歷程、理念、心情,分享我在這段旅程中所經歷的故事。
留言0
查看全部
發表第一個留言支持創作者!
瓶裝雪的沙龍 的其他內容
這篇文章將會講述新增造型的種類及簡單介紹。
這篇文章將會講述新增造型的種類及簡單介紹。
這篇文章將會介紹 Probuder ,Unity 官方製作的關卡設計工具。 Probuder | 關卡設計的利器
這篇文章將會介紹一個 Unity 3D 的人物角色和動畫的網站,以及安裝和放置遊戲中的簡易流程。
這篇文章將會介紹 Unity Animatior Edit 參數控制的方法,藉由連結程式腳本和動畫編輯器,讓動畫更靈活的運作。
這篇文章將會講述 Animation 在設定後要如何使用程式觸發,並不介紹直接使用的 Animation,並簡易提到 Animator 的連結教學。
這篇文章將會講述新增造型的種類及簡單介紹。
這篇文章將會講述新增造型的種類及簡單介紹。
這篇文章將會介紹 Probuder ,Unity 官方製作的關卡設計工具。 Probuder | 關卡設計的利器
這篇文章將會介紹一個 Unity 3D 的人物角色和動畫的網站,以及安裝和放置遊戲中的簡易流程。
這篇文章將會介紹 Unity Animatior Edit 參數控制的方法,藉由連結程式腳本和動畫編輯器,讓動畫更靈活的運作。
這篇文章將會講述 Animation 在設定後要如何使用程式觸發,並不介紹直接使用的 Animation,並簡易提到 Animator 的連結教學。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
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
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
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 創造類別之後就可以持續使用創建的類別來創建物件,以武器為例,在遊戲裡有不同的武器,但是他們的屬性是一樣的,我們就可以在一個類別裡面設定不同