Unity C# | 物件池基本概述

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

一、前言

  這篇文章將會講述物件池的基本概述,並介紹應用方向。

二、物件池

  在軟體開發中,物件池是一種常見的設計模式,用於讓物件使用效率最大化的有效管理與重複使用物件。物件池的主要功能在於提升效能與降低資源消耗。

1. 物件使用方式

  物件池的主要目的是避免頻繁的物件創建和銷毀,這也是新鮮人在程式設計時很常使用的方式,或者用於功能測試時快速撰寫時的做法,如果希望讓資源不會消耗太大,就會改為使用物件池。
  在物件池中,物件會被事先創建並存儲起來,當需要使用物件時,可以直接從物件池中取得一個可用的物件,而不是每次都創建一個新的物件。當物件不再需要使用時,可以將其放回物件池中,以供後續使用。
  當我們要從物件池取用一個新的物件時,僅僅轉移物件的座標即可,並不需要重複的生成物件與銷毀。因為是簡單的座標轉移與狀態改變,所以在資源的使用效率上更為高效。

2. 廢物資料

  在我之前撰寫的一篇文章中,聽說物件生成與銷毀的過程中,會產生多餘的垃圾資料,初時影響不大,但當生成成千上萬的物件時,就會對遊戲的系統造成可見的影響。

3. 設計難度

  這篇文章不介紹詳細的撰寫方式,第一個方面是因為精力關係,這兩天忙其他的事情沒精力研究;第二個方面飾物件池並不好分享,重複利用並不困難,重點是要判斷是否有現有物件,否則要生成新的物件,也就是陣列。

三、應用方向

  物件池在軟體開發中有廣泛的應用,基本上只要經常重複使用的遊戲元素都可以考慮使用物件池來設計。

1. 介面(UI)

  在遊戲開發中,介面通常是頻繁使用且數量眾多的物件,而我在使用的時候總是覺得介面很吃效能,因為座標改變相對比較困難,而且聽說大量地使用介面物件容易導致電腦當機。
  使用物件池能有效管理遊戲中的按鈕、文字、圖片等,這些都可以使用物件池來重複利用,提高介面的反應速度和效能,例如在 Facebook 社團中看到浮動視窗這種會移動的介面,就必須要使用物件池。

2. 子彈

  子彈!有什麼比子彈更容易成千上萬的出現?玩家在發射子彈、敵人在發射子彈、陷阱也可能發射子彈!在射擊遊戲或彈幕遊戲中,子彈是頻繁出現的物件,大量的子彈創建與銷毀更需要精簡的使用物件。
  使用物件池可以避免每次創建子彈物件,改為重複使用已經存在並且不再使用的子彈物件。這樣可以節省資源並提高遊戲性能,使子彈的生成和銷毀更加高效,也更不容易影響遊戲性。

3. 特效

  遊戲中的特效效果(如爆炸、粒子效果等)通常需要頻繁的創建和播放,這幾乎已經成為一種常識,使用物件池可以管理特效物件的重複利用,減少對系統資源的需求,提高特效的效果和性能。
  拿子彈來舉例就很容易懂了,發射、飛行、命中,這三個過程中通通會使用到特效,如果產生子彈要生成;子彈產生特效又要生成;音效產生又要生成,這個過程會使用三次的生成物件。

4. 音效

  音效在遊戲中扮演著重要的角色,我曾經以為一份音效就夠用了,不過在實作的時候發現有時候還是會在沒播放完的時候播放下一個。
  因此需要使用物件池重複利用已經存在的音效物件,尤其是音效物件是一個很容易重複使用的遊戲物件,只需要簡單的一行程式碼就能讓它重複運作,不需要生成一個新的物件。

四、後記

  這篇文章主要是讓我簡單撰寫好,然後我得趕快休息了,不知道為什麼暑假我沒有在度假的感覺,倒是認真開發專案讓我很投入就是了...


























為什麼會看到廣告
avatar-img
106會員
247內容數
對設計師如何成長為設計師好奇嗎? 2020年九月,我進入大學學習當一位設計師,從開始到沉寂,再到重燃熱忱,我將在方格子紀錄我的成長歷程、理念、心情,分享我在這段旅程中所經歷的故事。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
瓶裝雪的沙龍 的其他內容
這篇文章將會從基本概述到射線偵測應用的詳細步驟,講述運用射線改變特定圖層中,射線命中的物件顏色。
這篇文章將會講述平滑的旋轉與單次旋轉的差異,並介紹旋轉的兩種體系與其使用效果,並提供參考的示範影片。
這篇文章將會講述常見的座標(Transform)旋轉方式,適合初學者到進階程式員複習。
這篇文章將會講述設計模式中的狀態模式,其資料源自於書籍、網路、個人理解,從簡介→架構→撰寫→測試的整個流程進行介紹與分享。
這篇文章將會介紹建構式(Constructor),這是一個隱藏在程式腳本中的重要知識,我們極常使用建構式,但新手程式員幾乎不會知道它。
這篇文章將會講述 Unity Visual Effect Graph 的系統簡介,並且簡單介紹這項系統主線上的四個核心組件。
這篇文章將會從基本概述到射線偵測應用的詳細步驟,講述運用射線改變特定圖層中,射線命中的物件顏色。
這篇文章將會講述平滑的旋轉與單次旋轉的差異,並介紹旋轉的兩種體系與其使用效果,並提供參考的示範影片。
這篇文章將會講述常見的座標(Transform)旋轉方式,適合初學者到進階程式員複習。
這篇文章將會講述設計模式中的狀態模式,其資料源自於書籍、網路、個人理解,從簡介→架構→撰寫→測試的整個流程進行介紹與分享。
這篇文章將會介紹建構式(Constructor),這是一個隱藏在程式腳本中的重要知識,我們極常使用建構式,但新手程式員幾乎不會知道它。
這篇文章將會講述 Unity Visual Effect Graph 的系統簡介,並且簡單介紹這項系統主線上的四個核心組件。
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
這篇內容,將會講解什麼是腳本函式,以及與腳本函式相關的知識。包括腳本的簡介、使用函式(或全域變數)的注意事項、定義全域變數、定義函式、什麼是宣告、局部變數的應用。
Thumbnail
這篇內容,將會講解什麼是變數範圍,以及與變數範圍相關的知識。包括變數範圍的簡介、實體變數、全域變數、局部變數、常數。
Thumbnail
這篇內容,將會用一個簡單的範例,來解釋物件(Object)和實體(Instance)的差別。包括Instance的簡介、ID、物件改變會影響實體。
Thumbnail
一切從"物件(Object)"開始 1.建立新物件 2.編輯物件內容 3.在物件中新增區塊
※ Object(物件) & Constructor Function(建構式函式) Object(物件)是什麼? 物件是一種「可以將資料、程式碼包含在其中」的資料結構。 Object(物件)的兩種創造方式: 匿名物件:直接使用"{}"。沒有特別的名字,直接從Object中繼承過來的一個物件
Thumbnail
完成了Debug.log()的測試,接著還是要跟各位簡單講一下C#的一些規則,之後看程式會(比較)看得懂。 又講到變數? 在Unity中,變數是重要的工具,用來儲存和管理資料。讓開發者能夠靈活調整遊戲的行為和性能,減少代碼的重複性,使得遊戲開發更加高效和簡潔。透過使用變數,開發者可以輕鬆修改資料
讓我在這篇文章總結一下前面對物件導向設計的討論,我們討論了物件導向的四個特性:繼承、抽象、多型、封裝,分析了它們的問題,並跟函數式編程的思維做比較。我們引入了與之相對應的特性:泛型、特性系統、模組化,有些特性雖然跟那四個特性很像,但在一些細微的地方有不同的詮釋,使得整體思考方式很不一樣。 「繼
物件導向設計的一個重點就是封裝,這有很多層面上的意義,但基本上就是控制物件的成員變數和方法的存取權。物件導向的封裝還跟繼承機制有關,這使得有一些時候我們逼不得已必須把函式定義在類別上,這種做法使得物件的功能變得難以拆解。封裝應該是模組的職責,並不需要再給物件相同的能力。 一般的模組系統就是把相
Thumbnail
題目敘述 題目會給我們一組定義好的界面和需求,要求我們設計一個資料結構,可以滿足平均O(1)的插入元素、刪除元素、隨機取得元素的操作。 RandomizedSet() 類別建構子 bool insert(int val) 插入元素的function界面 bool remove(int val
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
這篇內容,將會講解什麼是腳本函式,以及與腳本函式相關的知識。包括腳本的簡介、使用函式(或全域變數)的注意事項、定義全域變數、定義函式、什麼是宣告、局部變數的應用。
Thumbnail
這篇內容,將會講解什麼是變數範圍,以及與變數範圍相關的知識。包括變數範圍的簡介、實體變數、全域變數、局部變數、常數。
Thumbnail
這篇內容,將會用一個簡單的範例,來解釋物件(Object)和實體(Instance)的差別。包括Instance的簡介、ID、物件改變會影響實體。
Thumbnail
一切從"物件(Object)"開始 1.建立新物件 2.編輯物件內容 3.在物件中新增區塊
※ Object(物件) & Constructor Function(建構式函式) Object(物件)是什麼? 物件是一種「可以將資料、程式碼包含在其中」的資料結構。 Object(物件)的兩種創造方式: 匿名物件:直接使用"{}"。沒有特別的名字,直接從Object中繼承過來的一個物件
Thumbnail
完成了Debug.log()的測試,接著還是要跟各位簡單講一下C#的一些規則,之後看程式會(比較)看得懂。 又講到變數? 在Unity中,變數是重要的工具,用來儲存和管理資料。讓開發者能夠靈活調整遊戲的行為和性能,減少代碼的重複性,使得遊戲開發更加高效和簡潔。透過使用變數,開發者可以輕鬆修改資料
讓我在這篇文章總結一下前面對物件導向設計的討論,我們討論了物件導向的四個特性:繼承、抽象、多型、封裝,分析了它們的問題,並跟函數式編程的思維做比較。我們引入了與之相對應的特性:泛型、特性系統、模組化,有些特性雖然跟那四個特性很像,但在一些細微的地方有不同的詮釋,使得整體思考方式很不一樣。 「繼
物件導向設計的一個重點就是封裝,這有很多層面上的意義,但基本上就是控制物件的成員變數和方法的存取權。物件導向的封裝還跟繼承機制有關,這使得有一些時候我們逼不得已必須把函式定義在類別上,這種做法使得物件的功能變得難以拆解。封裝應該是模組的職責,並不需要再給物件相同的能力。 一般的模組系統就是把相
Thumbnail
題目敘述 題目會給我們一組定義好的界面和需求,要求我們設計一個資料結構,可以滿足平均O(1)的插入元素、刪除元素、隨機取得元素的操作。 RandomizedSet() 類別建構子 bool insert(int val) 插入元素的function界面 bool remove(int val