什麼是 CullingGroup API?
當你想根據「物件是否可見」或「物件距離玩家有多遠」來切換處理時,就可以使用它。
例如:
- 將鏡頭中看不見的物件設為非啟用。
- 略過距離很遠的角色 AI 處理。
- 當敵人的生成點出現在鏡頭中時,不要生成敵人。
Vision 是什麼?
CullingGroup 是很棒的功能,但它只能從腳本存取,而且使用方式也稍微有些難度,因此不太像是能「快速上手,超方便!」地直接使用的東西。
Vision 是一套讓任何人都能輕鬆使用 CullingGroup 的函式庫。
Vision 的特點
- 能輕鬆存取 CullingGroup 的元件群
- 直覺的視覺化編輯器
- 高效能
以下影片示範的是 Vision 所提供的其中一個功能範例:將鏡頭中看不見的物件設為非啟用。

這個功能不需要寫程式碼也能實作。
安裝
你可以從 GitHub 儲存庫下載 Vision 的最新版本。
Releases: https://github.com/mackysoft/Vision/releases
使用方式
1. 建立 Culling Group Proxy
首先,建立作為 Vision 基礎的 CullingGroupProxy。
選擇「Tools/Vision/Create New CullingGroupProxy」選單
會建立出如下所示的 GameObject。

為建立好的 CullingGroupProxy 指定 Key
一開始會顯示「尚未設定 Key」的錯誤訊息,所以請先指定 Key。
在預設狀態下,可以使用 Main 這個 Key。
2. 新增 Culling Target Behaviour
從「Component/MackySoft/Vision/Culling Target Behaviour」選單新增
請將 CullingTargetBehaviour 掛在下列這類物件上:
- 想在鏡頭看不見時設為非啟用的物件
- 想在遠離玩家時停止執行 AI 的角色

調整球體半徑
掛上 CullingTargetBehaviour 的物件會顯示如下的球體(Bounding Sphere)。

這個球體是用來計算「是否能被鏡頭看見」以及「距離玩家有多遠」所必需的。
因此,請將球體調整為能完整包住物件。
如下圖所示,球體會依據是否能被鏡頭看見而改變顏色。


設定 Key
CullingTargetBehaviour 的 GroupKey 用來尋找設定了相同 Key 的 CullingGroupProxy。當 CullingTargetBehaviour 啟動時,會註冊到具有相同 Key 的 CullingGroupProxy。
設定 Bounding Sphere Update Mode
這個值對效能很重要。
BoundingSphereUpdateMode 預設設為 Dynamic,也就是每一幀都會更新球體的位置與半徑。
但有些物件不會移動。這種情況下,將 BoundingSphereUpdateMode 設為 Static,就能避免多餘的更新成本。
3. 接收回呼
若要接收球體的「可視狀態」與「相對距離狀態」發生變化的通知,可以使用 CullingTargetBehaviour.OnStateChanged。
(如果你心想「這不還是得寫程式嗎!」,也有不需要寫程式的通用元件可用)
using UnityEngine;
using MackySoft.Vision;
[RequireComponent(typeof(CullingTargetBehaviour))]
public class ReceiveCallbackExample : MonoBehaviour {
void Awake () {
var cullingTarget = GetComponent();
cullingTarget.OnStateChanged += OnStateChanged;
}
void OnStaeteChanged (CullingGroupEvent ev) {
if (ev.isVisible) {
Debug.Log("Visible!");
} else {
Debug.Log("Invisible!");
}
}
}
通用元件
Culling Target Renderers
這個元件會依據球體的可視狀態,切換已註冊 Renderer 的啟用與停用。
文章開頭影片中的功能,就是用這個元件實作的。

結語
這套工具已實際用在開發中,易用性、效能與實機上的行為都已經確認過。
GitHub: https://github.com/mackysoft/Vision
